CADisplayLink 的使用
来源:互联网 发布:spring web flow 知乎 编辑:程序博客网 时间:2024/06/05 12:46
CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。
我们在应用中创建一个新的 CADisplayLink对象,把它添加到一个runloop中,并给它提供一个 target和selector在屏幕刷新的时候调用。
CADisplayLink和其它CoreAnimation类一样,都是在QuartzCore.framework里。
使用方式
-(void)setDisplayLink{
displayLink = [CADisplayLinkdisplayLinkWithTarget:selfselector:@selector(waveAnimation)];
[displayLinkaddToRunLoop:[NSRunLoopmainRunLoop]forMode:NSRunLoopCommonModes];
}
#pragma mark - animation
- (void)waveAnimation {
// do some
[selfsetNeedsDisplay];
}
- (void)stopDisplayLink
{
[displayLinkinvalidate];
displayLink =nil;
}
当把CADisplayLink对象add到runloop中后,selector就能被周期性调用,类似于NSTimer被启动了;执行invalidate操作时,CADisplayLink对象就会从runloop中移除,selector调用也随即停止,类似于NSTimer的invalidate方法。
重要属性
下面不完整的列出了CADisplayLink的几个重要属性:
1、frameInterval(在iOS10之后取消了,用preferredFramesPerSecond代替。定义所需的每秒回调率帧。默认值是60。如果设置为0,将按本机显示硬件节奏。将选择最优回调所请求的速度。)
可读可写的NSInteger型值,标识间隔多少帧调用一次selector方法,默认值是1,即每帧都调用一次。官方文档中强调,当该值被设定小于1时,结果是不可预知的。
2、duration
只读的CFTimeInterval值,表示两次屏幕刷新之间的时间间隔。需要注意的是,该属性在target的selector被首次调用以后才会被赋值。selector的调用间隔时间计算方式是:时间=duration×frameInterval。
现存的iOS设备屏幕的FPS都是60Hz,这一点可以从CADisplayLink的duration属性看出来。duration的值都是0.166666…,即1/60。尽管如此,我们并没法确定苹果不会改变FPS,如果以后某一天将FPS提升到了120Hz了怎么办呢?这时,你设置了frameInterval属性值为2期望每秒刷新30次,却发现每秒刷新了60次,结果可想而知,出于安全考虑,还是先根据duration判断屏幕的FPS再去使用CADisplayLink。
3、timestamp
只读的CFTimeInterval值,表示屏幕显示的上一帧的时间戳,这个属性通常被target用来计算下一帧中应该显示的内容。
打印timestamp值,其样式类似于:
- 179699.631584
虽然名为时间戳,但这和常见的unix时间戳差异很大,事实上这是CoreAnimation使用的时间格式。每个CALayer都有一个本地时间(CALayer本地时间的具体作用会在后续文章中说明),可以获取当前CALayer的本地时间并打印:
- CFTimeInterval localLayerTime = [myLayer convertTime:CACurrentMediaTime() fromLayer:nil];
- NSLog("localLayerTime:%f",localLayerTime);
参考文档:http://blog.csdn.net/wzzvictory/article/details/22417181
http://www.cnblogs.com/sixindev/p/4522825.html
http://www.jianshu.com/p/c35a81c3b9eb
- CADisplayLink 的使用
- CADisplayLink 及定时器的使用
- CADisplayLink 及定时器的使用
- CADisplayLink 及定时器的使用
- CADisplayLink及定时器的使用
- CADisplayLink 及定时器的使用
- CADisplayLink 及定时器的使用
- CADisplayLink 及定时器的使用
- CADisplayLink 及定时器的使用
- CADisplayLink以及定时器的使用
- 定时器的使用NStimer 和CADisplayLink
- 使用CADisplayLink简单的实现倒计时
- IOS CADisplayLink的学习
- CADisplayLink
- CADisplayLink
- CADisplayLink
- CADisplayLink
- CADisplayLink
- Xcode 最新安装插件方案
- Java爬虫框架WebMagic的使用总结
- Java类加载
- 【H5】移动端 点击闪烁 解决方案
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- CADisplayLink 的使用
- 搭建zedboard交叉编译环境
- 哈夫曼树
- C++ (error: passing ‘const …'’ as ‘this’ argument of ‘…’ discards qualifiers [duplicate])
- 好东西来了!2017云栖大会400+份重磅资料下载
- 记断电引发的ORA-00600错误
- CSS选择器与优先级详解
- 灰度处理与二值化的关系
- 常用js函数整理汇总