在OC中,裁减图像为圆角,在CALayer中有两个很重要的属性,是会经常被连带一起调用的,(cornerRadius &masksToBounds)
如以下代码:
// 创建 UIImageView --> iconViewUIImageView *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 --> iconViewUIImageView *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.imageiconView.image = resImage;
这样就绘制出了圆角图像了。以上内容分享给大家,欢迎指导补充!