有什么方法可以暂时禁用UI的绘制(以及动画和其他相关内容的进展)?
我有一个通知系统可以合并通知,因此在一个运行循环周期中发生的多个通知会合并到一个感兴趣的一方,有点像setNeedsDisplay
可以在任何次数被调用一个循环,但绘图只发生一次。
问题是,我合并通知的方式是在下一个运行循环上安排前向通知,并在此期间跳过新的更新,如下所示:
private var startedCoalescingUpdates = false
func receiveNotification() {
guard startedCoalescingUpdates == false else {
return
}
startedCoalescingUpdates = true
OperationQueue.main.addOperation {
self.setForwardNotification = false
self.delegate.updateOccurred()
}
}
通知可以链接在一起,以便一个通知触发另一个通知,这可以触发另一个通知等。
因为OperationQueue.main.addOperation
发生在下一个周期(或者至少它是从我在addOperation
中调度的另一个块调用它),所以在通知传播时会发生一些UI绘图。 UI可以显示几个看起来不正确的帧;在通知全部完成之前,我宁愿不绘制UI或响应事件等,以便所有数据在第一次绘制之前完全就绪。我可能会做类似的事情:
private var startedCoalescingUpdates = false
func receiveNotification() {
guard startedCoalescingUpdates == false else {
return
}
startedCoalescingUpdates = true
//////
stopDrawingUI()
//////
OperationQueue.main.addOperation {
self.setForwardNotification = false
//////
resumeDrawingUI()
//////
self.delegate.updateOccurred()
}
}
这可能吗?