文本
CATextLayer和UILabel都是直接将文本绘制在图层的寄宿图中。使用时需要尽可能地避免改变这些包含文本的视图的frame,因为这样做的话文本就需要重绘。如果你想在图层的角落里显示一段静态的文本,但是这个图层经常改动,你就应该将文本放在一个子图层中。
光栅化
启用
shouldRasterize
属性会讲图层会在到一个屏幕之外的图像,然后这个图像会被缓存起来并绘制到实际图层的contents和子图层。
离屏渲染
图层的一下属性将会触发屏幕外绘制:
- 圆角(当和
maskToBounds
一起使用时,cornerRadius
和maskToBounds
独立作用的时候都不会有太大的性能问题,当你想显示圆角并沿着图层剪切子图层的时候,你可以使用CAShaperLayer) - 图层蒙版
- 阴影
对于那些需要动画而且要在屏幕外渲染的图层来说,你可以用CAShapeLayer
。
圆角性能优化
- 使用CAShapeLayer,结合UIBezierPath
- 使用contentsCenter,拉伸图片
shadowPath阴影绘制
混合和过度绘制
重叠图层会造成重复绘制
GPU放弃绘制完全被遮挡的像素,但是计算是否被遮挡会消耗处理器资源
为了加速处理过程,不到必须时刻不要使用透明图层
任何情况下你应该这样做:
- 给视图的backgroundColor属性设定一个固定的不透明的颜色
- 设置opaque属性为YES
减少图层数量
避免绘制不可见的图层
对图层做任何优化之前,你需要确定你不是在创建一些不可见的图层,图层在一下几种情况下会是不可见的:
- 图层在屏幕边界之外,或者父图层边界之外
- 完全在一个不透明图层之后
- 完全透明