美文网首页iOS知识点ios专题selector
iOS shouldRasterize光栅化--离屏渲染

iOS shouldRasterize光栅化--离屏渲染

作者: 路漫漫其修远兮Wzt | 来源:发表于2018-05-08 14:21 被阅读494次

    参考资料:
    ios开发中view.layer.shouldRasterize = YES 的使用说明
    iOS 离屏渲染的研究
    解决常见的masksToBounds离屏渲染带来的性能损耗
    http://www.cocoachina.com/cms/tags.php?/离屏渲染/
    深刻理解移动端优化之离屏渲染
    iOS离屏渲染优化(附DEMO)

    离屏渲染的触发方式

    设置了以下属性时,都会触发离屏绘制:

    shouldRasterize(光栅化)
    masks(遮罩)
    shadows(阴影)
    edge antialiasing(抗锯齿)
    group opacity(不透明)
    复杂形状设置圆角等
    渐变

    其中shouldRasterize(光栅化)是比较特别的一种:
    光栅化概念:将图转化为一个个栅格组成的图象。
    光栅化特点:每个元素对应帧缓冲区中的一像素。

    光栅化有什么好处?

    shouldRasterize = YES在其他属性触发离屏渲染的同时,会将光栅化后的内容缓存起来,如果对应的layer及其sublayers没有发生改变,在下一帧的时候可以直接复用。shouldRasterize = YES,这将隐式的创建一个位图,各种阴影遮罩等效果也会保存到位图中并缓存起来,从而减少渲染的频度(不是矢量图)。

    举个栗子

    如果在滚动tableView时,每次都执行圆角设置,肯定会阻塞UI,设置这个将会使滑动更加流畅。
    当shouldRasterize设成true时,layer被渲染成一个bitmap,并缓存起来,等下次使用时不会再重新去渲染了。实现圆角本身就是在做颜色混合(blending),如果每次页面出来时都blending,消耗太大,这时shouldRasterize = yes,下次就只是简单的从渲染引擎的cache里读取那张bitmap,节约系统资源。

    而光栅化会导致离屏渲染,影响图像性能,那么光栅化是否有助于优化性能,就取决于光栅化创建的位图缓存是否被有效复用,而减少渲染的频度。可以使用Instruments进行检测:

    当你使用光栅化时,你可以开启“Color Hits Green and Misses Red”来检查该场景下光栅化操作是否是一个好的选择。
    如果光栅化的图层是绿色,就表示这些缓存被复用;如果是红色就表示缓存会被重复创建,这就表示该处存在性能问题了。

    注意:
    对于经常变动的内容,这个时候不要开启,否则会造成性能的浪费

    相关文章

      网友评论

        本文标题:iOS shouldRasterize光栅化--离屏渲染

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