iOS-CADisplayLink详解以及与NSTimer对比

原创 2016年08月31日 11:00:18

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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS - 中三种定时器的用法NSTimer、CADisplayLink、GCD

一、NSTimer 1.创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:sel...

iOS 学习笔记 --- 定时器NSTimer、CADisplayLink、GCD

NSTimer定义/** 这下面主要是一些构造方法*///1. 创建一个定时器,但是么有添加到运行循环,我们需要在创建定时器后手动的调用 NSRunLoop 对象的 addTimer:forMode...
  • ZLKentu
  • ZLKentu
  • 2016年11月24日 16:00
  • 474

iOS经典讲解之NSTimer、CADisplayLink、GCD三种定时器的使用

作者:Loving_iOS 转载请标明出处:http://blog.csdn.net/loving_ios/article/details/50800992 在应用开发过程中,会遇到很多需要循环执行或...

iOS 中三种定时器的用法NSTimer、CADisplayLink、GCD

标签:ios   定时器   nstimer   cadisplaylink   gcd    一、NSTimer 1.创建方法 NSTimer *timer = [NS...
  • Hchq_99
  • Hchq_99
  • 2016年01月29日 10:59
  • 264

iOS开发CADisplayLink和NSTimer

什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r...
  • wqs1028
  • wqs1028
  • 2015年12月23日 16:44
  • 303

IOS学习之—— 定时器 NSTimer 和 CADisplayLink 类的使用

//********************************************************************************* 定时器 NSTimer 和 ...
  • TenMios
  • TenMios
  • 2016年03月30日 19:06
  • 321

深入理解CADisplayLink和NSTimer

  • 2016年08月30日 14:21
  • 74KB
  • 下载

深入理解CADisplayLink和NSTimer-Epub

  • 2016年08月30日 14:30
  • 6KB
  • 下载

当tableview/scrollview滚动时定时器NSTimer / CADisplayLink停止响应问题

当ScrollView滚动时定时器(NSTimer或CADisplayLink)停止响应问题

NSTimer、CADisplayLink、GCD 三种定时器的用法

在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法。在这个时候,我们就需要用到定时器。 在iOS中有很多方法完成定时器的任务,例如 NSTimer、CAD...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS-CADisplayLink详解以及与NSTimer对比
举报原因:
原因补充:

(最多只允许输入30个字)