iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么在IOS中使用ADisplayLink刷新屏幕
  • 524
分享到

怎么在IOS中使用ADisplayLink刷新屏幕

2023-06-15 10:06:34 524人浏览 薄情痞子
摘要

怎么在iOS中使用ADisplayLink刷新屏幕?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是CADisplayLink我们在应用中创建一个新的CADisplayL

怎么在iOS中使用ADisplayLink刷新屏幕?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

什么是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刷新屏幕问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 怎么在IOS中使用ADisplayLink刷新屏幕

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在IOS中使用ADisplayLink刷新屏幕
    怎么在IOS中使用ADisplayLink刷新屏幕?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是CADisplayLink我们在应用中创建一个新的CADisplayL...
    99+
    2023-06-15
  • c语言刷新屏幕功能怎么实现
    在C语言中,可以使用标准库函数`system("cls")`来实现刷新屏幕的功能。`system("cls")`会调用系统的命令行来...
    99+
    2023-08-18
    c语言
  • 怎么在Linux中使用屏幕键盘
    这篇文章主要介绍了怎么在Linux中使用屏幕键盘的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在Linux中使用屏幕键盘文章都会有所收获,下面我们一起来看看吧。屏幕键盘可以替代物理键盘输入。在某些情况下,屏...
    99+
    2023-06-28
  • 如何在VirtualBox中设置虚拟机的屏幕刷新率
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-06-10
  • 怎么在python中使用OpenCV调节屏幕亮度
    怎么在python中使用OpenCV调节屏幕亮度?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WE...
    99+
    2023-06-14
  • IBeacon怎么在IOS中使用
    这期内容当中小编将会给大家带来有关IBeacon怎么在IOS中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是iBeacon?iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7...
    99+
    2023-06-14
  • layui中使用checbox怎么实现在Ajax局部刷新
    本篇文章给大家分享的是有关layui中使用checbox怎么实现在Ajax局部刷新,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.需要添加一行代码(渲染后的checkbox代...
    99+
    2023-06-08
  • 在Windows11上怎么禁用锁定屏幕
    本文小编为大家详细介绍“在Windows11上怎么禁用锁定屏幕”,内容详细,步骤清晰,细节处理妥当,希望这篇“在Windows11上怎么禁用锁定屏幕”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2023-04-14
    windows11
  • 怎么在IOS中使用Cordova插件
    这篇文章给大家分享的是有关怎么在IOS中使用Cordova插件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、准备插件功能:打开IOS相机1:创建插件plugman create --name [插件名称] -...
    99+
    2023-06-14
  • 怎么在Mac上使用内部音频录制屏幕
    本篇内容主要讲解“怎么在Mac上使用内部音频录制屏幕”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Mac上使用内部音频录制屏幕”吧! ...
    99+
    2023-04-22
    mac
  • 怎么在excel中使用格式刷
    在Excel中使用格式刷,可以将一个单元格的样式应用到其他单元格或区域。下面是使用格式刷的步骤:1. 打开Excel并选择一个单元格...
    99+
    2023-10-07
    excel
  • 使用javascript怎么刷新页面
    使用javascript怎么刷新页面?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。javascript刷新页面的方法:1、使用“location.reload()”;2、使用“...
    99+
    2023-06-14
  • Linux系统怎么使用屏幕键盘
    这期内容当中小编将会给大家带来有关Linux系统怎么使用屏幕键盘,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。有时屏幕键盘显得非常重要,比如当你的实体键盘坏了,或者没有足够的键盘,等情况不得不适用屏幕键盘...
    99+
    2023-06-28
  • vue中怎么使用rem适配移动端屏幕
    这篇“vue中怎么使用rem适配移动端屏幕”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue中怎么使用rem适配移动端屏幕...
    99+
    2023-07-04
  • 怎么在Android应用中利用XML设置屏幕方向
    这篇文章给大家介绍怎么在Android应用中利用XML设置屏幕方向,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android  XML設置屏幕方向注意:Android只支持270度旋转。 <activ...
    99+
    2023-05-31
    android xml roi
  • 怎么在Android中获取的屏幕的尺寸
    怎么在Android中获取的屏幕的尺寸?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、底部没有虚拟按键这里获取到的宽高,就是你眼睛能看到的,屏幕亮着的地方的宽高。 ...
    99+
    2023-05-30
    android
  • 怎么在html5中实现分层屏幕适配
    本篇文章为大家展示了怎么在html5中实现分层屏幕适配,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。屏幕适配屏幕适配应当指内容 适配区 和 屏幕区 间的适配关系。单屏适配有 contain、cove...
    99+
    2023-06-09
  • 在excel中怎么使用格式刷呢
    在Excel中使用格式刷可以快速复制一个单元格的格式到其他单元格或范围。具体步骤如下:1. 选择你想要复制格式的单元格。2. 在Ex...
    99+
    2023-09-16
    excel
  • iOS中NavigationController怎么使用
    在iOS中,可以通过以下步骤来使用NavigationController:1. 创建一个NavigationController对...
    99+
    2023-09-26
    iOS
  • iOS中CocoaPods怎么使用
    要在iOS中使用CocoaPods,您需要按照以下步骤进行操作:1. 首先,您需要在您的mac上安装CocoaPods。打开终端并输...
    99+
    2023-09-29
    iOS
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作