iOS给UIimage添加圆角的两种方式

04/27/2017 16:02 下午 posted in  UIKit

众所周知,给图片添加圆角有CALayer的cornerRadius,

比如:

最直接的方法:

imgView.layer.cornerRadius1=110;
imgView.clipsToBounds = YES;

这事离屏渲染 (off - screen - rendering), 是很消耗性能的;有很多公司面试的时候会问到,你怎么将图片设置圆角,如果你

只回答了这个方法,那么很遗憾,没有加分。

下面我介绍一种更好的方法:

#import "Bys.h"

@implementation Bys

- (UIImage*)imageWithCornerRadius:(CGFloat)radius{
   CGRect rect = (CGRect){0.f,0.f,self.size};
   // void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);
   //size——同UIGraphicsBeginImageContext,参数size为新创建的位图上下文的大小
   //    opaque—透明开关,如果图形完全不用透明,设置为YES以优化位图的存储。
   //    scale—–缩放因子
   UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
   //根据矩形画带圆角的曲线
   CGContextAddPath(UIGraphicsGetCurrentContext(), [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);
   [self drawInRect:rect];
   //图片缩放,是非线程安全的
   UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
   //关闭上下文
   UIGraphicsEndImageContext();
   return image;
}

给UIImage添加生成圆角图片的扩展API: 这是on-screen-rendering