在OC中,裁减图像为圆角,在CALayer中有两个很重要的属性,是会经常被连带一起调用的,(cornerRadius &masksToBounds)
如以下代码:
// 创建 UIImageView --> iconView
UIImageView *iconView = [[UIImageView alloc]initWithFrame:CGRectMake(37, 150, 300, 300)];
// 设置图片
iconView.image = [UIImage imageNamed:@"photo"];
// 添加到视图view
[self.view addSubview:iconView];
iconView.layer.cornerRadius = 150;
iconView.layer.masksToBounds = YES;
这样设置是可以立马将想要的图片裁切为圆角,但是cornerRadius是在主线程时时渲染的,性能非常糟糕,除非在设置一张图片的时候使用,所以不建议使用。
而我接下来要推荐的一种设置方式,是使用路径裁切的方式--> UIBezierPath,实例代码如下:
// 创建 UIImageView --> iconView
UIImageView *iconView = [[UIImageView alloc]initWithFrame:CGRectMake(37, 150, 300, 300)];
// 设置图片
iconView.image = [UIImage imageNamed:@"photo"];
// 添加到视图view
[self.view addSubview:iconView];
// 开启上下文
UIGraphicsBeginImageContextWithOptions(iconView.image.size, NO, 0.0);
// 获取绘制圆的半径、宽、高 的一个区域
CGFloat radius = MIN(iconView.image.size.width, iconView.image.size.height) * 0.5;
CGFloat width = radius * 2;
CGFloat height = width;
CGRect rect = CGRectMake(0, 0, width, height);
// 使用 UIBezierPath 路径裁切,注意:先设置裁切路径,再绘制图像
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:rect];
// 添加到裁切路径
[bezierPath addClip];
// 将图片绘制到裁切好的区域内
[iconView.image drawInRect:rect];
// 从上下文获取当前绘制成圆形的图片
UIImage *resImage = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
// 赋值给 iconView.image
iconView.image = resImage;
这样就绘制出了圆角图像了。以上内容分享给大家,欢迎指导补充!