iOS中的丢帧问题是为了解决图像撕裂带来的问题。一般来说,页面滑动的流畅度是60fps,也就是1s有60帧更新,也就是每16.7ms生成一帧,如果CPU和GPU加起来的处理时间超过16.7ms,就会造成丢帧甚至卡顿,UI掉帧原因及滑动优化方案iOS设备的硬件时钟会发出Vsync(垂直同步信号),然后App的CPU会计算出要显示在屏幕上的内容,再将计算出的内容提交给GPU进行渲染。
最近在做一个APP性能的专项测试,视频剪辑过程中多次出现丢帧现象。为了更好的了解掉帧和掉帧的原因,我查阅了资料,记录了文章。在了解丢帧的原因之前,我先了解以下视图的渲染过程:1。CPU计算显示的内容(如文本绘制、UI布局计算、视图创建、图像解码等。).然后将计算出的内容提交给GPU2。经过GPU渲染(变换、图层合成、纹理渲染等。)完成后,将渲染结果放入帧缓冲器3。视频控制器会根据VSync信号逐行读取帧缓存器中的数据,经过可能的数模转换后,传输给显示器进行显示。备注:1。显示器上的所有图像都是逐行扫描的(从左到右,从上到下),如下图:3。
1。CPU和GPU通过总线连接,工作流程如上图:CPU中的工作完成后,会生成一个位图,通过总线在适当的时候上传到GPU进行处理。GPU得到位图后,会渲染相应的位图图层(顶点变换,纹理混合等。),然后结果会放入帧缓冲区,视频控制器会根据Vsync信号。
掉帧是为了解决图像撕裂带来的问题。图像撕裂是指屏幕上从帧缓冲区读取的图片有的是新数据,有的是旧图像数据,显示时会发生图像撕裂。苹果用垂直同步(Vsync) DoubleBuffer来解决图像撕裂的问题。由于垂直同步,出现了掉帧的问题。CPU和GPU合作解压渲染图片时,没有及时将新数据存入帧缓冲区,导致丢帧(之前的图片数据仍然显示在屏幕上,即重复显示)。
iOS设备的硬件时钟会发出Vsync(垂直同步信号),然后App的CPU会计算出要显示在屏幕上的内容,再将计算出的内容提交给GPU进行渲染。随后,GPU将渲染结果提交到帧缓冲区,视频控制器会根据VSync信号逐行读取帧缓冲区中的数据,通过可能的数模转换传输到显示器。换句话说,一帧的显示是由CPU和GPU共同决定的。一般来说,页面滑动的流畅度是60fps,也就是1s有60帧更新,也就是每16.7ms生成一帧,如果CPU和GPU加起来的处理时间超过16.7ms,就会造成丢帧甚至卡顿。
所以在开发的时候,也需要分别对CPU和GPU的压力进行评估和优化。1.预排版(版面计算,文字计算,缓存高度等。) 2.预渲染(文本的异步绘制、图像解码等。)虽然这两种方法性能都不错,但还是需要放在后台线程中,避免阻塞主线程。如果使用CoreText绘制文本,可以创建一个CoreText排版对象,然后自己计算。并且CoreText也可以留作以后绘图使用。
5、在ios上 滑动静态页面卡顿怎么解决如果是越狱,可以安装一个腾讯手机管家清理内存,可以帮助你的手机降低内存占用率,最大化释放更多的手机内存。可以直接点击垃圾清理,自动扫描清理软件缓存、垃圾文件、冗余包、系统缓存,彻底清除软件卸载后的残留,最后,你可以使用小火箭加速功能,随时刻录占用空间大的进程,操作简单,有趣。将imageView设置为尽可能不透明,将opque设置为尽可能是,当imageView的opque设置为YES时,alpha属性将无效。imageView的半透明度取决于其图片的半透明度或imageView本身的背景色合成的图层视图。