UI渲染的优化

2017-10-15  本文已影响8人  爱德华炼金术师

[http://www.jianshu.com/p/619cf14640f3]

Instrument Core Animation

Color Blended Layers

图层混合,红色表示有,绿色表示没有

Color Hits Green and Misses Red

图层是否命中缓存,红色表示没有,绿色表示有。
缓存中的对象有效期只有100ms,即如果在0.1s内没有被使用就会自动从缓存中清理出去。
通过开启图层光栅化启用缓存,label.layer.shouldRasterize = true

Color Copied Images

图片是否需要转化。蓝色表示有转化。GPU支持的格式有限,遇到不支持的格式需要进行转化。

Color Misaligned Images

黄色表示图片进行了缩放,紫色表示像素没有对齐
图片最好和UIImageViewsize一致

Color Offscreen-Rendered Yellow

图层是否有离屏渲染,黄色表示有。
以下情况可能会导致触发离屏渲染:

1、重写drawRect方法,cpu的离屏渲染
2、有mask或者是阴影(layer.masksToBounds, layer.shadow*),模糊效果也是一种mask
3、layer.shouldRasterize = true
Color Compositing Fast-Path Blue

蓝色表示硬件绘制

Flash updated Regions

发生重绘的区域

优化方案

避免图层混合

1、确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明如无特殊需要,不要设置低于1的alpha值
2、确保UIImage没有alpha通道

避免临时转换

1、确保图片大小和frame一致,不要在滑动时缩放图片
2、确保图片颜色格式被GPU支持,避免劳烦CPU转换

慎用离屏渲染

1、绝大多数时候离屏渲染会影响性能
2、重写drawRect方法,设置圆角、阴影、模糊效果,光栅化都会导致离屏渲染
3、设置阴影效果是加上阴影路径
4、滑动时若需要圆角效果,开启光栅化

上一篇下一篇

猜你喜欢

热点阅读