swift – 从后台操作中绘制NSView无效
发布时间:2020-12-14 04:38:01 所属栏目:百科 来源:网络整理
导读:我正在尝试从后台操作绘制到NSView,但看不到任何效果. let queue = OperationQueue()queue.addOperation() { doTheBackgroundStuff()} 启动后台操作,进行大量计算.在AppDelegate我有 @IBOutlet weak var image: NSImageView! // some image to show@IBOutlet
我正在尝试从后台操作绘制到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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |