美文网首页iOS开发技术分享
关于Off-Screen Rendering的一些验证

关于Off-Screen Rendering的一些验证

作者: binge | 来源:发表于2016-08-22 21:54 被阅读295次

     众所周知在iOS开发中,如果使用圆角的话,一般的做法是设置layer的cornerRadius这个属性。但是受网上一些流传的说法的影响,使用cornerRadius属相会造成离屏渲染,影响性能。但是事实真是这样的吗?为此我特写写了个demo进行了验证。

    在这个demo中我自定义了一个cell,每个cell中放置了四个圆角的label。如图:

如果仅仅设置layer.cornerRadius使用模拟器的离屏渲染发现并没有产生离屏渲染应有的黄色图像,并且使用Instrument中的Core Animation工具进行帧率检测几乎能达到将近60帧的流畅度,所以说造成的离屏渲染的真凶未必是layer.cornerRadius。如图:

此时如果设置layer.masksToBounds = YES;在进行检测会发现产生了离屏渲染,并且帧率立马降低了50%以上,仅仅达到24帧左右,侧面说明造成离屏渲染的真凶是layer.masksToBounds。如图:

这种情况下已经对用户体验造成了严重的影响,在真机上已经明显感觉到卡顿。怎么优化呢?最好的当时是使用Core Graphics进行绘制,但是有时候绘制确实没法实现,或者很麻烦。这时候不得不用layer的cornerRadius。按照网上一些大神的解释----滑动时若需要圆角效果,开启光栅化。所谓的这个光栅化简通俗的讲,也就是设置下layer的shouldRasterize和layer的rasterizationScale这两个属性。但是当我加上这两个属性开启光栅化后使用工具检测帧率大失所望,帧率低到15.如图:

根据网上的解释开启光栅化在第一定程度上可以缓存layer进行光栅化后渲染成的位图,但是UITableView是个比较特殊的控件,cell的调用异常频繁,本身开启光栅化就是一个耗性能的操作(纯个人理解,如果有好的理解方式还望指教)。所以如果是对cell使用圆角最好还是不要开启光栅化了。以上的所有数据均可通过我的demo进行简单的验证。

相关文章

  • 关于Off-Screen Rendering的一些验证

    众所周知在iOS开发中,如果使用圆角的话,一般的做法是设置layer的cornerRadius这个属性。但是受...

  • 离屏渲染

    On-Screen Rendering Off-Screen Rendering 界面的渲染过程 渲染过程: 如何...

  • iOS的离屏渲染

    图像显示原理(Off-Screen Rendering) CPU(Central Processing Unit,...

  • 离屏渲染

    概念:(Off-Screen Rendering ):如果有时因为一些限制,无法把渲染结果直接写入frame bu...

  • iOS 封装了非离屏渲染设置图片和圆角阴影代码

    小Tips:如何知道有没有离屏渲染Off-Screen Rendering?Do:通过模拟器->debug->Co...

  • iOS 关于离屏渲染 Off-Screen Rendering

    1. 什么是离屏渲染 三种不同的渲染方式:屏幕渲染、离屏渲染和CPU渲染。屏幕渲染,在用于显示的屏幕缓冲区中进行,...

  • 离屏渲染

    什么是离屏渲染? 离屏渲染(Off-Screen Rendering)顾名思义,指的是GPU在当前屏幕缓冲区以外新...

  • 离屏渲染

    离屏渲染Off-Screen Rendering 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。还...

  • 离屏渲染的理解

    什么是离屏渲染 Off-Screen Rendering意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓...

  • OpenGL之离屏渲染

    什么是离屏渲染 Off-Screen Rendering意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓...

网友评论

    本文标题:关于Off-Screen Rendering的一些验证

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