CADisplayLink翻译

来源:互联网 发布:网路和网络 编辑:程序博客网 时间:2024/06/08 15:13

CADisplayLink对象是一个时间相关的对象,它允许你的应用将它的渲染同步到显示的刷新速率上?(不太通顺)

Overview

1.你的应用程序初始化一个新的display link,提供一个target对象和一个selector,selector将在屏幕更新时调用。为了同步你的显示循环,你的应用将它添加到一个run loop中(通过 add(to:forMode:) 方法)。

2.一旦这个display link 与一个run loop关联,这个target上的selector将在屏幕的内容需要更新时被调用。target可以通过读取display link’s timestamp属性来恢复上一帧显示的时间。例如,一个应用播放movies可能使用这个timestamp来计算下一次播放哪个video frame。一个应用程序如果自己处理动画,它可能使用这个timestamp来决定在哪以及怎样显示还未到来的frame。duration属性提供了在frames之间的时间间隔。你可以使用这个value值来计算显示的frame的速率,下一帧大概显示的时间,和调整渲染的行为,以使下一帧及时显示。

3.你的应用可以通过将isPaused属性设置为true来禁止通知。并且,如果你的应用不能在规定的时间提供frames,你可能想选择一个慢一点的帧率。一个有较慢但恒定的帧率的应用比一个跳帧的应用显得更加平滑。你可以通过设置preferredFramesPerSecond 属性来设置帧率。

4.当你的应用使用完了一个display link,你应该调用invalidate() 来将它从run loops 中删除和将它与target解除关系。

Listing 1 shows how you can create a display link and add it to the current run loop. The display link invokes the step function, which simply prints the current timestamp, with each screen update.

Listing 1
Creating a display link

func createDisplayLink() {    let displaylink = CADisplayLink(target: self,                                    selector: #selector(step))    displaylink.add(to: .current,                    forMode: .defaultRunLoopMode)}func step(displaylink: CADisplayLink) {    print(displaylink.timestamp)}
原创粉丝点击