前言
在iOS开发中我们经常会遇到给UIImageView添加圆角,如:给用户头像设置圆角等。在这里记录一下使用过的三种方法。
方法一:通过设置UIView的layer来设置圆角
UIImageView *imgView = [UIImageView new];
imgView.image = [UIImage imageNamed:@"aa"];
imgView.layer.cornerRadius = imgView.frame.size.width / 2;
imgView.layer.masksToBounds = YES;
此方法的有个缺点是:会强制Core Animation提前渲染屏幕的离屏绘制, 而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现
方法二:通过Graphics绘制图片,将图片裁剪成圆角
- (UIImage *)clipImage1:(UIImage *)image {
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
// 获取上下文
CGContextRef contextRef = UIGraphicsGetCurrentContext();
// 添加一个圆
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextAddEllipseInRect(contextRef, rect);
CGContextClip(contextRef);
// 画图片
[image drawInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
裁剪后设置图片即可
方法三: 依然是绘制图片,这次是通过贝塞尔曲线绘制图片
- (UIImage *)clipImage2:(UIImage *)image {
UIGraphicsBeginImageContextWithOptions(image.size, NO, 1.0);
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:image.size.width / 2] addClip];
[image drawInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
绘制后设置UIImageView的图片即可
总结:
以上设置图片圆角的三种方法,在使用过程中各有优缺点,需要根据实际情况具体判断使用方法。
另外推荐一下我的导航栏联动库:GKNavigationController