iOS离屏渲染

2020-07-21  本文已影响0人  古方月

正常渲染与离屏渲染

image.png

正常渲染流程 :图像经过CPU解密后,由GPU渲染到帧缓冲区(FrameBuffer),然后扫描显示到屏幕上

离屏渲染流程:图像有CPU处理完成后,由GPU渲染到离屏缓冲区(OffscreenBuffer),在离屏缓冲区进一步处理合并后,提交到帧缓冲区,最后显示到屏幕上。

圆角触发离屏渲染
    //1.按钮存在背景图片
    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    btn1.frame = CGRectMake(100, 30, 100, 100);
    btn1.layer.cornerRadius = 50;
    [self.view addSubview:btn1];
    
    [btn1 setImage:[UIImage imageNamed:@"btn.png"] forState:UIControlStateNormal];
    btn1.clipsToBounds = YES;
    
    //2.按钮不存在背景图片
    UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom];
    btn2.frame = CGRectMake(100, 180, 100, 100);
    btn2.layer.cornerRadius = 50;
    btn2.backgroundColor = [UIColor blueColor];
    [self.view addSubview:btn2];
    btn2.clipsToBounds = YES;
    
    //3.UIImageView 设置了图片+背景色;
    UIImageView *img1 = [[UIImageView alloc]init];
    img1.frame = CGRectMake(100, 320, 100, 100);
    img1.backgroundColor = [UIColor blueColor];
    [self.view addSubview:img1];
    img1.layer.cornerRadius = 50;
    img1.layer.masksToBounds = YES;
    img1.image = [UIImage imageNamed:@"btn.png"];
    
    //4.UIImageView 只设置了图片,无背景色;
    UIImageView *img2 = [[UIImageView alloc]init];
    img2.frame = CGRectMake(100, 480, 100, 100);
    [self.view addSubview:img2];
    img2.layer.cornerRadius = 50;
    img2.layer.masksToBounds = YES;
    img2.image = [UIImage imageNamed:@"btn.png"];
Offscreen.png

当我们开启了masksToBounds或者clipsToBounds,同时还设置了图片,就会触发离屏渲染。其实不光是图片,我们为视图添加一个有颜色、内容或边框等有图像信息的子视图也会触发离屏渲染。

离屏渲染的另一个原因 - 光栅化shouldRasterize

开启光栅化,会将layer作为位图保存到离屏缓冲区,下次使用的时候,直接复用,提高渲染的效率
shouldRasterize光栅化的使用建议

离屏渲染对性能的影响
既然离屏渲染有性能问题,为什么我们还要使用离屏渲染呢?

ios如何检测离屏渲染

image.png

如上图,黄色的部分就是触发了离屏渲染。

离屏渲染触发原因总结

  1. 使用了 mask 的 layer (layer.mask)
  2. 需要进行裁剪的 layer (layer.masksToBounds / view.clipsToBounds)
  3. 设置了组透明度为 YES,并且透明度不为 1 的 layer (layer.allowsGroupOpacity/ layer.opacity)
  4. 添加了投影的 layer (layer.shadow*)
  5. 采用了光栅化的 layer (layer.shouldRasterize)
  6. 绘制了文字的 layer (UILabel, CATextLayer, Core Text 等)
上一篇下一篇

猜你喜欢

热点阅读