离屏渲染

2020-07-13  本文已影响0人  Zorin

一、离屏渲染的产生的原因

?????? 待补充

二、离屏渲染的解决方法

1. 圆角优化

  1. 使用贝塞尔曲线 UIBezierPath 和 Core Graphics 画出一个圆角
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100,100,100,100)];

imageView.image = [UIImage imageNamed:@"myImg"];
//开始对imageView进行画图

UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,NO,1.0);

//使用贝塞尔曲线画出一个圆形图

[[UIBezierPath bezierPathWithRoundedRect:imageView.boundscornerRadius:imageView.frame.size.width]addClip];

[imageView drawRect:imageView.bounds];

imageView.image=UIGraphicsGetImageFromCurrentImageContext();

//结束画图

UIGraphicsEndImageContext();

[self.view addSubview:imageView];
  1. 使用CAShapeLayer和UIBezierPath设置圆角
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

imageView.image = [UIImage imageNamed:@"myImg"];

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];

CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];

//设置大小

maskLayer.frame = imageView.bounds;

//设置图形样子

maskLayer.path = maskPath.CGPath;

imageView.layer.mask = maskLayer;

[self.view addSubview:imageView];

总的来说就是用CAShapeLayer的内存消耗少,渲染速度快,建议使用第2种。

2. shadow优化

  1. UI切图

  2. 使用贝塞尔指定 阴影路线

imageView.layer.shadowColor=[UIColor grayColor].CGColor;

imageView.layer.shadowOpacity=1.0;

imageView.layer.shadowRadius=2.0;

UIBezierPath *path=[UIBezierPath bezierPathWithRect:imageView.frame];

imageView.layer.shadowPath=path.CGPath;

3. Core Animation工具检测离屏渲染

对于离屏渲染的检测,苹果为我们提供了一个测试工具Core Animation。可以在Xcode->Open Develeper Tools->Instruments中找到 WeChat5d262906434a0deca6b74323e085f776.png
上一篇 下一篇

猜你喜欢

热点阅读