我正在尝试从后台操作绘制到NSView,但看不到任何效果. let queue = OperationQueue()queue.addOperation() { doTheBackgroundStuff()} 启动后台操作,进行大量计算.在AppDelegate我有 @IBOutlet weak var image: NSImageV
let queue = OperationQueue() queue.addOperation() { doTheBackgroundStuff() }
启动后台操作,进行大量计算.在AppDelegate我有
@IBOutlet weak var image: NSImageView! // some image to show @IBOutlet weak var number: NSTextField! // a corresponding number @IBOutlet weak var mainView: NSView! // the main view holding the above
分配
number.intValue = Int32(someNumber)
是经常(经常)从后台运作发出的.但文本永远不会改变.我在IB中为视图和TextField设置了“可以同时绘制”.我也试过了
if mainView.lockFocusIfCanDraw() { mainView.setNeedsDisplay(mainView.rectPreservedDuringLiveResize) mainView.unlockFocus() }
在文本字段分配之后.也无济于事.
通常,如果您将视图更新代码从后台任务中发送回主队列,这些问题就会消失:DispatchQueue.main.async { // your view update code }
如果你的doTheBackgroundStuff中没有太多的地方,你可以把它们放在视图更新中,即每当你访问你的mainView时.
否则,有助于将事物重新分组为非UI繁重的部分,然后在最后将视图更新推送到Dispatch.main.async.