当前位置 : 主页 > 手机开发 > 其它 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-12
我正在尝试从后台操作绘制到NSView,但看不到任何效果. let queue = OperationQueue()queue.addOperation() { doTheBackgroundStuff()} 启动后台操作,进行大量计算.在AppDelegate我有 @IBOutlet weak var image: NSImageV
我正在尝试从后台操作绘制到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.

网友评论