微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 从后台操作中绘制NSView无效

我正在尝试从后台操作绘制到NSView,但看不到任何效果.

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐