返回顶部
首页 > 资讯 > 移动开发 >浅谈IOS屏幕刷新ADisplayLink
  • 156
分享到

浅谈IOS屏幕刷新ADisplayLink

IOS屏幕刷新 2022-05-22 09:05:25 156人浏览 泡泡鱼
摘要

目录什么是CADisplayLinkCADisplayLink与NSTimer有什么不同CADisplayLink使用的例子注意什么是CADisplayLink 我们在应用中创建一个

什么是CADisplayLink

我们在应用中创建一个新的CADisplayLink对象,把它添加到一个runloop中,并给它提供一个target和selector在屏幕刷新的时候调用。

一但CADisplayLink以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector,这时target可以读到CADisplayLink的每次调用的时间戳,用来准备下一帧显示需要的数据。例如一个视频应用使用时间戳来计算下一帧要显示的视频数据。在UI做动画的过程中,需要通过时间戳来计算UI对象在动画的下一帧要更新的大小等等。

在添加进runloop的时候我们应该选用高一些的优先级,来保证动画的平滑。可以设想一下,我们在动画的过程中,runloop被添加进来了一个高优先级的任务,那么,下一次的调用就会被暂停转而先去执行高优先级的任务,然后在接着执行CADisplayLink的调用,从而造成动画过程的卡顿,使动画不流畅。

duration属性提供了每帧之间的时间,也就是屏幕每次刷新之间的的时间。我们可以使用这个时间来计算出下一帧要显示的UI的数值。但是duration只是个大概的时间,如果CPU忙于其它计算,就没法保证以相同的频率执行屏幕的绘制操作,这样会跳过几次调用回调方法的机会。

frameInterval属性是可读可写的NSInteger型值,标识间隔多少帧调用一次selector方法,默认值是1,即每帧都调用一次。如果每帧都调用一次的话,对于iOS设备来说那刷新频率就是60HZ也就是每秒60次,如果将frameInterval设为2 那么就会两帧调用一次,也就是变成了每秒刷新30次。

我们通过pause属性开控制CADisplayLink的运行。当我们想结束一个CADisplayLink的时候,应该调用-(void)invalidate 从runloop中删除并删除之前绑定的target跟selector另外CADisplayLink不能被继承。

CADisplayLink与NSTimer有什么不同

iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会在每次刷新结束都被调用,精确度相当高。NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在阻塞状态,触发时间就会推迟到下一个runloop周期。并且NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间的延迟范围。CADisplayLink使用场合相对专一,适合做UI的不停重绘,比如自定义动画引擎或者视频播放的渲染。NSTimer的使用范围要广泛的多,各种需要单次或者循环定时处理的任务都可以使用。在UI相关的动画或者显示内容使用CADisplayLink比起用NSTimer的好处就是我们不需要在格外关心屏幕的刷新频率了,因为它本身就是跟屏幕刷新同步的。

CADisplayLink使用的例子


self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateTextColor)];
self.displayLink.paused = YES;
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] fORMode:NSRunLoopCommonModes];
-(void)updateTextColor{}
- (void)startAnimation{
  self.beginTime = CACurrentMediaTime();
  self.displayLink.paused = NO;
}
- (void)stopAnimation{
 self.displayLink.paused = YES;
 [self.displayLink invalidate];
 self.displayLink = nil;
}

我们知道动画效果就是一个属性的线性变化,比如UIView 动画的EasyInEasyOut。通过数值按照不同速率的变化我们能生成更接近真实世界的动画效果。我们也可以利用这个特性来使一些其他属性按照我们期望的曲线变化。比如当播放视频时关掉视频的声音我可以通过CADisplayLink来实现一个EasyOut的渐出效果:先快速的降低音量,在慢慢的渐变到静音。

注意

通常来讲:iOS设备的刷新频率事60HZ也就是每秒60次。那么每一次刷新的时间就是1/60秒 大概16.7毫秒。当我们的frameInterval值为1的时候我们需要保证的是CADisplayLink调用的`target`的函数计算时间不应该大于 16.7否则就会出现严重的丢帧现象。

Mac应用中我们使用的不是CADisplayLink而是CVDisplayLink它是基于C接口的用起来配置有些麻烦但是用起来还是很简单的。

以上就是浅谈IOS屏幕刷新ADisplayLink的详细内容,更多关于IOS屏幕刷新ADisplayLink的资料请关注编程网其它相关文章!

--结束END--

本文标题: 浅谈IOS屏幕刷新ADisplayLink

本文链接: https://lsjlt.com/news/30535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈IOS屏幕刷新ADisplayLink
    目录什么是CADisplayLinkCADisplayLink与NSTimer有什么不同CADisplayLink使用的例子注意什么是CADisplayLink 我们在应用中创建一个...
    99+
    2022-05-22
    IOS 屏幕刷新
  • 怎么在IOS中使用ADisplayLink刷新屏幕
    怎么在IOS中使用ADisplayLink刷新屏幕?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是CADisplayLink我们在应用中创建一个新的CADisplayL...
    99+
    2023-06-15
  • requestAnimationFrame定时动画屏幕刷新率节流示例浅析
    目录前言早期定时动画屏幕刷新率requestAnimationFramecancelAnimationFrame通过 requestAnimationFrame 节流前言 很长时间...
    99+
    2023-02-23
    requestAnimationFrame刷新节流 requestAnimationFrame定时动画 requestAnimationFrame屏幕刷新率
  • win10屏幕刷新率如何调
    本篇内容主要讲解“win10屏幕刷新率如何调”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win10屏幕刷新率如何调”吧!win10屏幕刷新率调节方法:在win10系统桌面任意空白处单击鼠标右键...
    99+
    2023-07-01
  • Win8设置屏幕分辨率和屏幕刷新频率图文教程
      Win8屏幕的改变可以实现多种操作设定,包括屏幕分辨率的调整、显示器的选择以及横竖屏的切换等等。Win8这些屏幕设定功能的运用,跟过去的操作系统相比,有什么特点或是不同点我们就在本期的Win8大百科栏目...
    99+
    2022-06-04
    频率 屏幕 屏幕分辨率
  • Win10电脑屏幕刷新率怎样调节
    本篇文章给大家分享的是有关Win10电脑屏幕刷新率怎样调节,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。电脑的刷新率一般是默认60Hz的,但是有些朋友觉得60Hz不怎么合适,看...
    99+
    2023-06-27
  • Windows中如何更改屏幕的刷新频率
    这篇文章主要为大家展示了“Windows中如何更改屏幕的刷新频率”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Windows中如何更改屏幕的刷新频率”这篇文章吧。具体步骤:右键点击桌面任意空白处...
    99+
    2023-06-27
  • win7系统如何调整屏幕刷新频率
    要调整Win7系统的屏幕刷新频率,可以按照以下步骤操作:1. 右键点击桌面上的空白区域,选择“屏幕分辨率”或“显示设置”。2. 在弹...
    99+
    2023-10-23
    win7
  • c语言刷新屏幕功能怎么实现
    在C语言中,可以使用标准库函数`system("cls")`来实现刷新屏幕的功能。`system("cls")`会调用系统的命令行来...
    99+
    2023-08-18
    c语言
  • win11屏幕刷新率调整不了如何解决
    本篇内容主要讲解“win11屏幕刷新率调整不了如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win11屏幕刷新率调整不了如何解决”吧!解决方法:方法一: 首先尝试右键开始菜单打开“任务管...
    99+
    2023-07-02
  • requestAnimationFrame定时动画屏幕刷新率节流的方法
    这篇文章主要介绍“requestAnimationFrame定时动画屏幕刷新率节流的方法”,在日常操作中,相信很多人在requestAnimationFrame定时动画屏幕刷新率节流的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-07-05
  • 浅谈Vant-list 上拉加载及下拉刷新的问题
    目录Vant-list 上拉加载及下拉刷新vant下拉刷新与上拉加载一起使用问题下拉刷新触发两次 list与pull解决方法是Vant-list 上拉加载及下拉刷新 第一步引入 im...
    99+
    2024-04-02
  • 如何在VirtualBox中设置虚拟机的屏幕刷新率
    在VirtualBox中设置虚拟机的屏幕刷新率可以通过以下步骤实现: 打开VirtualBox并启动要设置的虚拟机。 在虚拟机中,点击顶部菜单栏中的“设备”选项。 在下拉菜单中选择“插入增强功能光盘映像”。 在虚拟机中打开“...
    99+
    2024-06-10
    virtualbox
  • Win10如何查看屏幕刷新频率看它是否正常
      有Win10用户觉得自己电脑的屏幕刷新频率不正常,导致眼睛看久了容易疲劳,很不舒服。那么在Win10下要如何查看屏幕的刷新频率呢下面小编将向你讲解。   方法   1.桌面上点击右键,屏幕分辨率。   2.点击&l...
    99+
    2023-06-14
    Win10 屏幕 刷新频率 频率
  • 笔记本电脑中如何查看修改屏幕刷新频率
    小编给大家分享一下笔记本电脑中如何查看修改屏幕刷新频率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在桌面空白处右键,点击打开“屏幕分辨率”窗口。在弹出的屏幕分辨...
    99+
    2023-06-28
  • Vue项目如何改变屏幕尺寸重新刷新页面-计算页面尺寸
    目录改变屏幕尺寸重新刷新页面-计算页面尺寸方式一方式二尺寸的自适应 大屏自适应通过 postcss-px2rem 插件,实现项目的自适应通过transform,可用于echarts的...
    99+
    2024-04-02
  • Android 10 (Android Q)中的屏幕刷新率(display refresh rate)切换方法和策略
           本文禁止转载,如有需求,请联系作者。 1. 屏幕刷新率和应用的显示帧率        首先请区分好屏幕刷新率(Panel Refresh Rate)和应用的帧率(...
    99+
    2022-06-06
    刷新率 方法 display Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作