众所周知,给图片添加圆角有 CALayer 的 cornerRadius
,
比如:最直接的方法
imgView.layer.cornerRadius = 100;
imgView.clipsToBounds = YES;
这会造成离屏渲染(off - screen - rendering),是很消耗性能的;有很多公司面试的时候会问到这个问题“你怎么将图片设置圆角?”如果你只回答了这个方法,那么很遗憾……
但是!但是!但是!
Apple 公司实际上早就发现了这个问题,所以,他们在 iOS 9 时修复了这个问题。所以,如果你的项目只需要适配 iOS 9 以及更高版本,那么请放心大胆的用上面这个方面!不会卡!不会卡!网上所说的掉帧问题只在 iOS 9 之前才有,iOS 9 开始没有这个问题了!
下面介绍另一种方法:
- (UIImage*)imageWithCornerRadius:(CGFloat)radius {
CGRect rect = (CGRect){0 ,0, self.size};
// size——同UIGraphicsBeginImageContext,参数size为新创建的位图上下文的大小
// opaque—透明开关,如果图形完全不用透明,设置为YES以优化位图的存储。
// scale—–缩放因子
UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
// 根据矩形画带圆角的曲线
[[UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:radius] addClip];
[self drawInRect:self.bounds];
// 图片缩放,是非线程安全的
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
return image;
}
如果你的项目只需要适配 iOS 9 以及之后的版本,那么这个方法稍微有点点多此一举,但也是很好的方法。