iOS-CADisplayLink详解以及与NSTimer对比

CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器;
CADisplayLink是属于 QuartzCore 框架的,所以和UI界面以及图像的渲染有很大的关系;

CADisplayLink官方文档


这里利用CADisplayLink做了一个计时器,实现效果挺好的

这里写图片描述


01、iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会在每次刷新结束都被调用,精确度相当高。

02、CADisplayLink使用场合相对专一,适合做UI的不停重绘,比如自定义动画引擎或者视频播放的渲染。NSTimer的使用范围要广泛的多,各种需要单次或者循环定时处理的任务都可以使用.

03、在UI相关的动画或者显示内容使用 CADisplayLink比起用NSTimer的好处就是我们不需要在格外关心屏幕的刷新频率了,因为它本身就是跟屏幕刷新同步的。


    CADisplayLink 比较简单,初始化方法只有一个,类方法
    + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
     // 将定时器添加到 runloop 运行循环中
    - (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
     // 将定时器从 runloop 运行循环中移除
    - (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
     // 注销 CADisplayLink 定时器
    - (void)invalidate;
     // 是否暂停
    @property(getter=isPaused, nonatomic) BOOL paused;
     //  设置时间间隔
    @property(nonatomic) NSInteger frameInterval;


CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(addNum)];

02.将定时器添加到 runloop 运行循环中
  • FOUNDATION_EXPORT NSString * const NSDefaultRunLoopMode; // RunLoop默认运行模式,在UI控件拖拽模式下无效
  • FOUNDATION_EXPORT NSString * const NSRunLoopCommonModes; // RunLoop普通运行模式,适用于一般的UI控件事件中
  • NSRunLoopCommonModes 模式比 NSDefaultRunLoopMode更高级
    [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
03.设置时间间隔,类型是NSInteger,默认为1.但实际意义是帧,默认每帧调用一次
  • 在iOS中,每一帧是60HZ频率,也就是每一秒刷新60次,所以默认1秒方法执行60次
  • 如果想设置每一秒执行一次,需设置 frameInterval 为 60
    displayLink.frameInterval = 60;    
04.设置是否暂停,pause属性默认是NO
    [displayLink setPaused:YES];

CADisplayLink定时器的一般操作

开启定时器

- (IBAction)begin:(id)sender {
    self.displayLink.paused = NO;
}

暂停定时器

- (IBAction)pause:(id)sender {
    self.displayLink.paused = YES;
}

停止定时器(销毁)

- (IBAction)stop:(id)sender {
    self.displayLink.paused = YES;
    [self.displayLink invalidate];
    self.displayLink = nil;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值