iOS中的动画是一个很大的模块,不可能一下子介绍完,下面就来说说CADisplayLink,也就是逐镇动画.
首先,什么是CADisplayLink?
CADisplayLink是一个能让我们以和屏幕刷新频率相同的频率将内容绘到屏幕上的定时器.我们将CADisplayLink绑定到Runloop中,每当屏幕需要刷新(一般屏幕刷新为60帧/s)时候,就会调用CADisplayLink绑定的selector,这样我们就可以在selector中做一些事情来达到某些特定的效果.
她和NSTimer不同的地方有:
1.原理不同
就像上面说的那样,CADisplayLink以和屏幕刷新频率相同的频率将内容绘到屏幕上的定时器.我们将CADisplayLink绑定到Runloop中,每当屏幕结束刷新的时候,runloop就会向target发送制定的selector消息.
NSTimer以制定的模式注册到runloop中后,每当到达设定的周期后,runloop就会向target发送制定的selector消息
2.精确性不同
CADisplayLink是以和屏幕相同的频率将内容绘到屏幕上,iOS设备的屏幕刷新频率是固定的60/s,在正常情况下CADisplayLink每次都会被调用.NSTimer在Runloop特别忙的情况下,就会推迟到下一周期,不过可以通过NSTimer的tolerance属性,设置可以容忍的触发的时间范围.
注:CADisplayLink的频率不是固定的60/s(默认是60/s),受frameInterval属性的调控,如果frameInterval设置为2.则CADisplayLink的频率为60/2.
形成逐帧可以用UIImageView的animationImages,不过一般不这么使用,因为这样一旦设置完animationImages后,中间的过程就无法控制了.如图1.1
而是使用CADisplayLink,图1.2
效果如下: