- 什么是离屏渲染
离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作
- 离屏渲染触发的场景
- 圆角(同时设置
layer.masksToBounds = YES、layer.cornerRadius
大于0)
- 图层蒙版
- 阴影,
layer.shadowXXX
,如果设置了layer.shadowPath
就不会产生离屏渲染
- 遮罩,
layer.mask
- 光栅化,
layer.shouldRasterize = YES
- 离屏渲染消耗性能的原因
需要创建新的缓冲区,离屏渲染的整个过程,需要多次切换上下文环境,先是从当前屏幕(On-Screen
)切换到离屏(Off-Screen
)等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上,又需要将上下文环境从离屏切换到当前屏幕
- 以下两种绘制圆角图片方法,可以防止离屏渲染
- (void)drawCornerPicture{
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(200, 400, 200, 200)];
imageView.image = [UIImage imageNamed:@"1"];
// 开启图片上下文
// UIGraphicsBeginImageContext(imageView.bounds.si