码迷,mamicode.com
首页 > 其他好文 > 详细

CADisplaylink初解

时间:2018-06-13 15:12:52      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:shu   interval   视图   date   href   应该   target   animation   一个   

一、理解准备

技术分享图片

  • 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的值会浮动

  • 效果图 :

技术分享图片

CADisplaylink初解

标签:shu   interval   视图   date   href   应该   target   animation   一个   

原文地址:https://www.cnblogs.com/iOS-July/p/9177101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!