CADisPlayLink

1.CADisPlayLink
系统级定时器 ,父类NSObject.他的调用频率和设备屏幕刷新频率相同。
和NSTimer一样也需要RunLoop支持。
2.相关API

 创建
 +(CADisPlayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel

将计时器加入到runloop中,必须加入到runloop中才有作用
 -(void)addToRunLoop:(NSRunLoop*)runloop forMode:(NSRunLoopMode)mode;
 
将计时器从runloop中删除
-(void)rmoveFromRunloop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;

销毁定时器
-(void)invalidate;


常用属性
duration 两次屏幕刷新的时候间隔,通过此f值g可以拿到屏幕的刷新频率,苹果一般是60hz(一秒60次)是个估值,

NSInteger  frameInterval  多少次屏幕刷新后才调用一次方法 10以后被废弃,默认刷新一次调用一次

timestamp 屏幕显示的上一帧的时间戳,是CoreAnimation使用的时间格式

 targetTimestamp 屏幕显示的下一帧时间戳


paused 是否暂停计时器

 preferredFramesPerSecond 一秒内执行多次方法 默认60

demo

  CADisplayLink *disLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(test)];
    [disLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    //每秒钟调用多次 默认60.
    disLink.preferredFramesPerSecond = 10;
    //是否暂停
    disLink.paused = NO;

-(void)test{
    
    NSLog(@"测试");
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 获取屏幕刷新率可以通过Core Animation框架中的CADisplayLink类实现。CADisplayLink是一个定时器类,可以监听屏幕的刷新频率,并在每一帧结束时发送回调。 首先需要创建一个CADisplayLink对象,并添加到主运行循环中: ``` CADisplayLink *displayLink = [UIScreen mainScreen].maximumFramesPerSecond == 0 ? [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick:)] : [UIScreen mainScreen].linkWithPreferredFramesPerSecond == 0 ? [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick:)] : [UIScreen mainScreen].linkWithPreferredFramesPerSecond == 60 ? [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick60fps:)] : [UIScreen mainScreen].linkWithPreferredFramesPerSecond == 120 ? [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick120fps:)] : [UIScreen mainScreen].linkWithPreferredFramesPerSecond == 90 ? [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick90fps:)] : nil; [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; ``` 然后实现对应的回调方法,在每帧结束时获取屏幕的刷新率: ``` - (void)displayLinkTick:(CADisplayLink *)link { CGFloat frameInterval = link.duration/60.0; screenRefreshRate = (int)(1.0/frameInterval); } ``` 最后需要注意的是,在iOS 10之后,为了省电和减少GPU负担,屏幕刷新率可能会动态调整,因此获取到的屏幕刷新率并不一定是恒定的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值