 
     
一、理解准备
- CADisplaylink是一个计时器对象
- 可以使用这个对象来保持应用中的绘制与显示刷新的同步 
- 电子显示屏是由一个个像素点构成,要让屏幕显示的内容变化,需要以一定的频率刷新这些像素点的颜色值,系统会在每次刷新时触发CADisplaylink 
简单来讲就是一种定时器,利用刷帧和屏幕频率来重绘渲染页面
创建方式为:
CADisplayLink *timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(waveAnimation)];
[timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];   
- 只要CADisplayLink对象加入Runloop中,则会在屏幕需要刷新时回调@selector
二、重要方法、属性
- 通过该方法,以target/selector模式生成一个绑定了触发事件的实例对象 - + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
- 但是,如果你仅仅只生成一个实例对象,那么你所绑定的方法并不会执行,此时,需要将其加入到Runloop中 - - (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
- 从runloop中移除当前实例对象 - - (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
- CADisplayLink计时器销毁 - [self.timer invalidate];
- paused - 暂停 - self.timer.paused = YES;
- frameInterval - selector触发间隔 - self.timer.frameInterval = 2;
- timestamp - 获取上一次selector被执行的时间戳 
 只有当selector被执行过一次之后这个值才会被取到有效值
 这个属性是用来比较当前图层时间与上一次selector执行时间的差,从而来计算本次UI应该发生的改变的进度(例如视图做移动效果
- duration - 获取当前设备的屏幕刷新时间间隔 
 需要selector触发一次才可以取值
 当前iOS设备的刷新频率都是60HZ,也就是说每16.7ms刷新一次
 用于辅助计算
 如果CPU过于繁忙,duration的值会浮动
ps:最近忙了,昨天阿里云备案提交管局了[初审失败了,资料填写也挺麻烦的,不过失败是好事],公司愈来愈会忙,但也正合我的心意,希望自己能在这个毕业季有一个长足的进步。
- 效果图 :  
- 这里是Demo传送门 
 
		