项目中遇到的离屏渲染

3,351 阅读1分钟

前言

在本篇文章中,如何判断离屏渲染是依据 Debug 中的 Color Off-screen Rendered。关于什么是离屏渲染可以参见这篇文章

离屏渲染的例子

一、 设置 UIImageView 的圆角 触发离屏渲染的条件:

  • cornerRadius 属性赋值。
  • masksToBounds 为 YES。
  • 调用 setImage 为 imageView 设置图片。

以上条件,缺一不可。

代码示例:

self.imageView.layer.cornerRadius = 20;
self.imageView.layer.masksToBounds = YES;
[self.imageView setImage:[UIImage imageNamed:@"123"]];

截屏2022-03-29 下午3.36.42.png

需要注意的是,仅是修改 cornerRadius 与 masksToBounds 并不会造成离屏渲染。

二、为视图绘制阴影

代码示例:

self.grayView.layer.cornerRadius = 10;
self.grayView.layer.shadowRadius = 10;
self.grayView.layer.shadowOpacity = 0.2;

当我们使用上述代码给视图绘制阴影时,会造成离屏渲染。

截屏2022-03-29 下午3.40.17.png

解决办法:为阴影绘制 path,防止系统去开辟新的缓存区来绘制 path。

self.grayView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:self.grayView.bounds] CGPath];

这样,就不会造成离屏渲染了。