CADisplayLink是个什么鬼???

最近看开源代码老是看到CADisplayLink,这个通常用在需要不停绘制页面的情况下,既然是QuatzCore框架中的,那绘制什么的效率肯定应该比用Timer高了吧....

用法和NSTimer很像。

    CADisplayLink *dl = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeCallback:)];
    [dl addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    self.displayLink = dl;
    
    UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(20, 80, 200, 50)];
    lab.backgroundColor = [UIColor blueColor];
    [self.view addSubview:lab];
    lab.textColor = [UIColor redColor];
    
    lab.font = [UIFont systemFontOfSize:28];
    lab.text = [NSString stringWithFormat:@"倒计时%ds", i];
    _textLabel = lab;

下面是回调

- (void)timeCallback:(id)sender {
    
    int second = i--;
    NSString *str = [NSString stringWithFormat:@"倒计时%ds", second];
    [self.textLabel setText:str];
    
    CFTimeInterval time = self.displayLink.duration;
    NSLog(@"%f", time);                   // 0.01666666...
    
    NSLog(@"%ld", self.displayLink.frameInterval);
    int y = round(1.0/time);
    
    self.displayLink.frameInterval = y;   //  约等于60帧,其实就是60啦
    NSLog(@"%ld", self.displayLink.frameInterval);
    
}

当然不用的时候记得

- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
或者
- (void)invalidate;
@property(readonly, nonatomic) CFTimeInterval timestamp;   // 当前时间
@property(readonly, nonatomic) CFTimeInterval duration;    // 每帧的间隔

测试结果是1/60 s调用一次callback。

时间: 2024-08-06 03:22:10

CADisplayLink是个什么鬼???的相关文章

今天中了一个脚本病毒。把我的所有 html 加了 vbs 脚本,WriteData 是什么鬼?

今天中了一个脚本病毒.把我的所有 html 加了 vbs 脚本: WriteData 是什么鬼? <SCRIPT Language=VBScript><!-- DropFileName = "svchost.exe" WriteData = "4D5A90000300000004000000FFFF0000B8000000000000004000000000000000000000000000000000000000000000000000000000000

iOS:三种常见计时器(NSTimer、CADisplayLink、dispatch_source_t)的使用

一.介绍 在iOS中,计时器是比较常用的,用于统计累加数据或者倒计时等,例如手机号获取验证码.计时器大概有那么三种,分别是:NSTimer.CADisplayLink.dispatch_source_t 二.使用 @property (strong,nonatomic)NSTimer *timer; @property (strong,nonatomic)CADisplayLink *displaylinkTimer; @property (strong,nonatomic)dispatch_s

单例是个什么鬼

单例是个什么鬼 写在前面 常常听到有人说起单例,那么单例到底是什么呢?又该怎么用呢?或者说,它的应用场景有哪些呢?为了搞清楚这些问题,决定自己亲自实践一下,加深感悟.文中用到的一些单例的实现方式可能是从网上参考的,感谢大家的分享和讲解,这里就不一一引用啦. 单例是什么 单例,顾名思义,就是单个实例,也就是说,某个类如果实现了单例模式,那这个类就只能生成一个实例.单例模式是设计模式的一种,关于设计模式,我大概了解过有工厂模式,抽象工程模式,观察者模式,原型模式等,具体使用哪种设计模式,要视具体应用

tableView使用定时器CADisplaylink改变imageView的transform的bug

在UITableViewCell的imageView中,设置定时器CADisplayLink调用CGAffineTransformRotate改变transform时, 点击UItableViewCell时,会导致图标变形,代码如下: @property(nonatomic,strong)CADisplayLink *link; -(CADisplayLink *)link { if (_link == nil) { //使用transform的方式旋转,每隔1/60秒移动一次,会改变image

关情纸尾-----Quartz2D定时器CADisplayLink下雪效果

定时器CADisplayLink下雪效果 1.定时器雪花整体思路: 先在控制器View面绘制一个雪花. 在View加载完毕后,添加一个定时器. 在定时器方法当中调用得绘方法. 在绘图方法当不段的去修改雪花的Y值. 当雪花的Y值超过屏幕的高度时,让雪花的Y值重新设为0.从最顶部开始. 2.添加定时器实现方案 第一种采用NSTime 第二种采用CADisplayLink 最终采用CADisplayLink方案. 2.1为什么采用CADisplayLink方案不用NSTime? 首先要了解setNee

CADisplayLink定时器

1 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(XXXXXXXX)]; 2 //此定时器每秒更新60次,设置此属性后,每秒更新60/frameInterval 3 link.frameInterval = 2; 4 //添加定时器 5 [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes

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

一.NSTimer 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; TimerInterval : 执行之前等待的时间.比如设置成1.0,就代表1秒后执行方法 target : 需要执行方法的对象. selector : 需要执行的方法 repeats : 是否需要循环 2.

【Spark 深入学习 01】 Spark是什么鬼?

经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将枯燥无味的技术讲的通俗易懂- r.kelly 2013年的时候第一次听说spark这么个神器,那时候它还幼小,没什么人鸟它,但是它强大基因注定了它不是个凡夫俗子, 故事就是从那一小撮人群中开始的. 一.Spark何许人也 姓名:Spark 性别:未知 出生地:加州大学伯克利分校AMP实验室 出生年月

iOS CADisplayLink 定时器的使用

CADisplayLink 是一个能让我们以和屏幕刷新频率相同的频率将内容刻画到屏幕上的定时器,在应用中创建一个新的CADisplayLink对象,把他添加到一个runloop中,并且给他提供一个target和selector在屏幕刷新时调用 一旦displayLink以特定的模式注册到runloop中之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector,这是target可以读到CADisplayLink每次调用的时间戳,用来准备下