欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 linktimestamp属性来获取前一帧显示的时间。例如,显示电影的应用程序可能会使用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对象。

参考iOS Runloop 制作一个 FPSLabel

方法介绍

// 新建屏幕刷新同步定时器,屏幕每刷新一次(一帧),调用一次 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;

实际运用

其它文章