iOS开发之CADisplayLink

CADisplayLink类 CADisplayLink是一个可以让UI的绘图渲染和显示器的刷新帧率保持一致的计时器对象。
1、概述
      创建一个新的展示链,需要提供一个目标对象和方法,在屏幕刷新的时候调用该方法。然后需要在应用中将此展示链添加进应用的运行循环中。
       一旦显示链添加进了应用的运行循环中,那么在屏幕内容需要刷新时目标对象的方法就会被调用。目标对象可以通过读取展示链的timestamp属性获取到前一帧展示的时间点。例如,在播放视频的应用中,或许会用timestamp计算下一帧展示的时间。一个展示自身动画的应用或许会用timestamp来决定展示对象在下一帧中在哪里展示和以什么方式展示。duration属性提供了两帧之间的时间间隔。可以用该属性计算显示器帧率,以及显示器下一帧的大概时间。还可以调整绘制行为以便在显示之前下一帧已经做好准备。
      在使用中,可以通过设置属性paused的值为YES来停止目标对象方法的执行。如果应用在给定的时间里无法及时提供帧率,那么可以选择让显示帧率满一点。更慢但连续的帧率会比直接跳过的帧率显得更柔和。可以通过设置属性frameInterval(默认值是1即每每一帧都调用一次)来达到更快更慢的效果。(此属性现在使用preferredFramesPerSecond替换)
      当不再需要展示链时调用invalidate来将其中运行循环中移除并和目标对象分离开。另外,CADisplayLink不能被继承。

2、使用
     a 创建实例:
<span style="font-size:14px;">+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;</span>

     b 执行
<span style="font-size:14px;">- addToRunLoop:forMode:        注册展示链到运行循环中
- removeFromRunLoop:forMode:   将展示链从指定运行循环中移除
- invalidate                   将展示链移出所有运行模式</span>

     c 设置 

        duration                                          屏幕刷新间隔时间

        paused                                           是否暂停向目标对象调用的方法

        timestamp                                      图像上一帧显示的时间

        preferredFramesPerSecond          每一秒显示多少帧

        targetTimestamp                            目标对象方法被调用的下一次时间点


注:iOS设备的刷新频率事60HZ也就是每秒60次。那么每一次刷新的时间就是1/60秒 大概16.7毫秒。当我们的frameInterval值为1的时候我们需要保证的是 CADisplayLink调用的target的函数计算时间不应该大于 16.7否则就会出现严重的丢帧现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值