是否可以在下一个运行循环周期中关闭绘制UI?

时间:2017-08-16 18:04:28

标签: ios

有什么方法可以暂时禁用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()
    }
}

这可能吗?

0 个答案:

没有答案