iOS 给 UIimage 添加圆角

众所周知,给图片添加圆角有 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 以及之后的版本,那么这个方法稍微有点点多此一举,但也是很好的方法。

你可能感兴趣的:(iOS 给 UIimage 添加圆角)