众所周知,给图片添加圆角有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;
}
@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