加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读