This is a simple playground test (make sure you create use Blank
from the macOS
templates)
import AppKit
import PlaygroundSupport
let view = NSView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
let progressBar = NSProgressIndicator(frame: CGRect(x: view.bounds.midX - 60, y: 0, width: 120, height: 32))
view.addSubview(progressBar)
progressBar.isIndeterminate = true
progressBar.style = .bar
// Present the view in Playground
PlaygroundPage.current.liveView = view
progressBar.startAnimation(nil)
DispatchQueue.global().async {
Thread.sleep(forTimeInterval: 5)
DispatchQueue.main.async {
progressBar.stopAnimation(nil)
}
}
This will present a indeterminate playground and after 5 seconds it will stop animating.
The point here is, you are likely blocking the "main" thread, which is why you're getting "Applications not responding", but you also need to ensure that any updates made to the UI are done only on the "main" thread.
The use of DispatchQueue.global().async
and Thread.sleep(forTimeInterval: 5)
is for demonstration purposes only, instead, what ever long running/blocking work your doing would be executed within the DispatchQueue.global()
context