1:iOS-Color Blended Layers
实测有效 并且不会引起离屏渲染
常规view的设置圆角 也会导致颜色混合 如果无交互事件可以用CAShapeLayer来代替 CALayer仍会导致颜色混合问题 如图所示Color Blended Layers 通过模拟器Debug可以查看视图中颜色混合.如果视图中的颜色混合越多,那么GPU通过混合纹理计算出像素的RGB值需要消耗的时间就越长,GPU的使用率就越高,可以通过减少颜色混合来提升滑动的流畅性.
像素混合是只同一个区域两个不同的View的叠加,顶部视图的颜色有不透明度,那么顶部视图会和底部视图发生颜色混合,为了避免像素混合,尽可能地为顶部视图设置背景色,且设置opaque为YES,这样会减少GPU的计算.
UILabel在iOS8以前,UILabel使用的是CALayer作为底图层,而在iOS8开始,UILabel的底图层变成了_UILabelLayer,绘制文本的方式发生了改变.因此opaque设置无效.需要设置masksToBounds为yes。 (来源:https://www.jianshu.com/p/bdd39a56142a)
旋转45度也会导致颜色混合
2:iOS-Color Off-Screen Rendered
shadow阴影引发的离屏渲染 实测有效 但是path设置不当可能会影响阴影效果
redView2.layer.shadowPath = [UIBezierPath bezierPathWithRect:redView2.bounds].CGPath;
##3:能用CAShapeLayer实现的就不要用drawRect重绘**
原因分析: [http://blog.csdn.net/sandyloo/article/details/51063799](https://link.jianshu.com?t=http://blog.csdn.net/sandyloo/article/details/51063799)
* 渲染快速。CAShapeLayer使用了硬件加速,绘制同一图形会比用Core Graphics快很多。
* 高效使用内存。一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用太多的内存。
1.绘制图形性能的优化最好的办法就是不去绘制。
2.利用专有图层CAShapeLayer代替绘图需求。
3.不得不用到绘图尽量缩小视图面积,并且尽量降低重绘频率。
4.异步绘制,推测内容,提前在其他线程绘制图片,在主线程中直接设置图片。
网友评论