fps(frames per second) 每秒钟显示多少帧画面,在静止不变的内容,我们不需要考虑它的刷新率.但是在执行动画或滑动的时候,fps的值直接反映出滑动的流畅程度
1.避免图层混合
opaque(不透明), 这个属性提示绘制系统如何处理view.如果opaque设置为YES,绘图系统会将view看成完全不透明,模式为YES; 确保backgroundColor和父视图颜色一致且不透明, 如果没有特殊需要,不要设置低于1的alpha值;确保UIImage没有alpha通道
2. 避免临时转换
确保图片大小与fame一直,不要在滑动的时候缩放图片, 确保图片格式被Gpu支持,避免cpu转换
3. 慎用离屏渲染
(1)绝大多数时候离屏渲染会影响性能
(2)重写drawRect方法,设置圆角、阴影、模糊效果,光栅化都会导致离屏渲染
(3)设置阴影效果是加上阴影路径.避免 Core Animation去计算,避免离屏渲染
imgView.layer.shadowPath =UIBezierPath(rect: imgView.bounds).CGPath
(4)滑动时若需要圆角效果,开启光栅化
设置cornerRadius本身并不会导致离屏渲染,但很多时候它还需要配合layer.masksToBounds = true使用。设置masksToBounds会导致离屏渲染。解决方案是尽可能在滑动时避免设置圆角,如果必须设置圆角,可以使用光栅化技术将圆角缓存起来:
// 设置圆角label.layer.masksToBounds =true
label.layer.cornerRadius =8
label.layer.shouldRasterize =true
label.layer.rasterizationScale = layer.contentsScale
(5) 我们在刷新视图的时候, 尽可能把需要绘制的区域缩小,对未发生改变的区域不需要刷新