作用:一个计时器,根据屏幕刷新频率周期性执行某种操作。与NSTimer类似。多用应用于跟显示有关的操作,如core Animation
相关方法:
//创建对象
+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
//将计时器加入到runloop中,必须加入到到runloop中才有作用
- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
//从runloop中移除定时器
- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
注:
NSRunLoopMode模式有:
NSDefaultRunLoopMode--默认模式,在该模式下操作可能被阻断,不被执行。如果在主线程中,scrollview滑动时,就会临时切换到其他私有的模式(如UITrackingRunLoopMode)。从而displayLink不被执行,不滑动时才恢复
NSRunLoopCommonModes--NSDefaultRunLoopMode,NSEventTrackingRunLoopMode等的结合,在此模式下的事件不会被打断
//销毁定时器
- (void)invalidate;
相关属性:
timestamp --屏幕显示的上一帧的时间戳,是CoreAnimation使用的时间格式。不同于unix时间戳
duration--两次屏幕刷新的时间间隔。通过此可知屏幕的刷新频率,苹果的屏幕刷新频率一般为60Hz(一秒刷新60次)
targetTimestamp --屏幕显示的下一帧的时间戳
paused--是否暂停计时器
frameInterval --多少次屏幕刷新后才调用一次方法,ios10.0后被废弃。默认刷新一次调用一次
preferredFramesPerSecond-- 一秒内执行多少次方法,默认60
举例:
//创建
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(doSomething:)];
//设置调用的刷新间隔
displayLink.frameInterval = 60;
//加入到runloop中
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
//销毁
[displayLink invalidate];
displayLink = nil;