美文网首页
iOS圆角性能优化

iOS圆角性能优化

作者: 氺_氺 | 来源:发表于2017-05-19 10:26 被阅读0次

    一般是通过一下几种方式处理的:

    1.直接使用setCornerRadius,直接操作layer。

    使用很简单,但这样设置会触发离屏渲染,比较消耗性能。。

    2.setCornerRadius设置圆角之后,shouldRasterize=YES光栅化

    shouldRasterize=YES设置光栅化,可以使离屏渲染的结果缓存到内存中存为位图, 使用的时候直接使用缓存,节省了一直离屏渲染损耗的性能。但是如果layer及sublayers常常改变的话,它就会一直不停的渲染及删除缓存重新 创建缓存,所以这种情况下建议不要使用光栅化,这样也是比较损耗性能的

    3.直接覆盖一张中间为圆形透明的图片

    这种方法就是多加了一张透明的图片,GPU计算多层的混合渲染blending也是会消耗 一点性能的,但比第一种方法还是好上很多的

    4.UIImage drawInRect绘制圆角

    这种方式GPU损耗低内存占用大,而且UIButton上不知道怎么绘制,可以用 UIimageView添加个点击手势当做UIButton使用。

    5.SDWebImage处理图片时Core Graphics绘制圆角




    使用Instruments的Core Animation查看性能

    Color Offscreen-Rendered Yellow

    开启后会把那些需要离屏渲染的图层高亮成黄色,这就意味着黄色图层可能存在性能问题。

    Color Hits Green and Misses Red

    如果shouldRasterize被设置成YES,对应的渲染结果会被缓存,如果图层是绿色,就表示这些缓存被复用;如果是红色就表示缓存会被重复创建,这就表示该处存在性能问题了。

    用Instruments测试得

    第一种方法,ios9.0之前UIImageView和UIButton都高亮为黄色。ios9.0之后只有UIButton高亮为黄色。

    第二种方法UIImageView和UIButton都高亮为绿色

    第三种方法,无任何高亮,说明没离屏渲染。 这种圆片覆盖的方法一般只用在底色为纯色的时候,如果圆角图片的父View是张图片的时候就没办法了,而且底色如果是多种颜色的话那 要做多张不同颜色的圆片覆盖。(可以用代码取底色的颜色值给圆片着色)

    第四种方法无任何高亮,说明没离屏渲染(但是CPU消耗和内存占用会很大)

    第五种方法无任何高亮,说明没离屏渲染,而且内存占用也不大。(暂时感觉是最优方法)

    ---------------------------------

    iOS 保持界面流畅的技巧:

    http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/

    ---------------------------------

    文章的内容主要源自于:https://github.com/walkdianzi/DSRoundedImageArticle

    相关文章

      网友评论

          本文标题:iOS圆角性能优化

          本文链接:https://www.haomeiwen.com/subject/avtyxxtx.html