离屏渲染的概念:
先
在屏幕外面创建新的缓冲区,然后
渲染到纹理中,最后
将结果渲染到当前显示屏幕的帧缓冲区中。
那么为什么离屏渲染耗性能:主要原因是环境切换
(转换环境到屏幕外缓冲区,转换屏幕到帧缓冲区)。
所以,界面如果在滚动过程中有大量的离屏渲染发生,会严重影响帧率。
以上观点纯属听说,至于是真是假,说的人多了,大家也就都信了,于是在写项目的过程中,总是有意的去考虑一些界面优化的问题,比如说切圆角。
如今,切圆角真的已经被玩坏了,百度搜索“iOS切圆角”,各种各样的答案,让你眼花缭乱,经常是越看越懵逼,看到你怀疑人生。
所以,有人要问了,切圆角而已,有必要考虑那么多吗?
对于这个问题,我只能保持沉默,因为我压根都没有考虑过。
但是,为了跟上时代的潮流,毕竟这年头,不知道几种切圆角的方式,都不好意思说自己是干iOS的,面试都过不了。
因此,我连夜又学了两种切圆角的方式,做了个比较,结果我震惊了。。。
下面使用了四种方式展示图片,并记录对应的fps(帧率)和CPU使用率。
第一种方式:正常图片,无圆角;
第二种方式:使用layer.cornerRadius和layer.masksToBounds切圆角;
第三种方式:使用drawRect绘制圆角;
第四种方式:使用遮罩绘制圆角。
由上图大家可以看出,每页加载50张图片,四种方式的平均帧率不相上下,我用的是iPhone7测试,至于在其他机型上差别大不大,欢迎大家动手试试,方便的可以留言交流。
我个人认为,除非在项目要求非常严格的APP内,平时,我们可以不用考虑由切圆角引起的性能消耗与掉帧的问题。
这里是demo地址,感兴趣的可以自己测试:https://github.com/wangzhaomeng/LLRoundedImage
如果你对界面优化感兴趣,推荐一篇文章:http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/#more-41893
觉得好,请给个star,谢谢!
网友评论