CADisplayLink
程序员文章站
2024-01-14 19:29:16
...
CADisplayLink
CADisplayLink官网介绍如下:
A timer object that allows your application to synchronize its drawing to the refresh rate of the display.
CADisplayLink 是一个定时器对象可以让你的应用以与显示器的刷新界面相同的频率进行绘图。
提供一个target
对象和一个屏幕刷新时调用的selector
,来实例化一个新的display link
。为同步display loop与display同步,使用add(to:forMode:)方法将其添加到runloop中
当display link
与run loop绑定后,当屏幕的内容需要刷新时,target
对象上的selector
就会被调用。target
可以通过读取display link
的timestamp属性来获取前一帧显示的时间。例如,显示电影的应用程序可能会使用timestamp
来计算下一个要显示的视频帧。执行自己的动画的应用程序可能会使用timestamp
来确定显示的对象在即将到来的帧中的显示位置和方式。
duration属性提供了在maximumFramesPerSecond帧之间的时间量。 要计算实际的帧持续时间,请使用targetTimestamp - timestamp
。 你可以在应用程序中使用此值来计算显示的帧率。
参考iOS — 使用CADisplayLink来实现定时任务
属性介绍:
-
timestamp
-是只读的CFTimeInterval
,表示屏幕上一帧的时间戳。 -
duration
属性用于设置每帧之间的间隔。 -
frameInterval
属性用于设置调用一次selector
方法之间的间隔帧数,默认是1
。即iOS设备的默认刷新频率是60Hz
,所以动画或视频的更新时间若长于1/60
秒(即16.7
毫秒),则会出现明显的卡顿感觉。touch event
事件的touchMoved
方法的周期,以及UIPanGestureRecognizer
调用手势处理方法的周期最快都只能在16.7毫秒左右。 -
paused
属性用于控制CADisplayLink
的暂停和运行。而结束CADisplayLink
应调用invalidate
方法,从RunLoop
中删除该CADisplayLink
对象。
方法介绍
// 新建屏幕刷新同步定时器,屏幕每刷新一次(一帧),调用一次 selector
+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
// 添加到某个 runloop 中
- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
// 从添加到的 runloop 中移除
- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
// 销毁释放
- (void)invalidate;
实际运用
其它文章