Mazy.ma的博客

每天学习一点点,每天进步一点点... stay foolish stay hungry....

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;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mazy_ma/article/details/52382900
个人分类: iOS
想对作者说点什么? 我来说一句

NSTimer实现的小计时器

2015年11月07日 671KB 下载

ios计时器NSTimer的使用

2015年03月25日 71KB 下载

没有更多推荐了,返回首页

不良信息举报

iOS-CADisplayLink详解以及与NSTimer对比

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭