self.imageView.layer.masksToBounds = YES;
self.imageView.layer.cornerRadius = 15;
操作起来方便简洁,也是小编之前常用的处理方式,但是作为消耗性能的小怪兽,当数据量比较大的时候对性能的消耗还是十分大的,所以我们今天来尝试一下其他的解决方案。
self.layer.mask
属性,来设置圆角 //开始对imageView进行画图
UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 0.0);
CGFloat radius = self.imageView.bounds.size.width;
//创建贝塞尔曲线(此处有多种创建方式)
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageView.bounds cornerRadius:radius];
//设置path为绘制范围
[path addClip];
// 开始绘制
[self.imageView drawRect:self.imageView.bounds];
// 从上下文上获取剪裁后的照片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
//结束画图
UIGraphicsEndImageContext();
//开始对imageView进行画图
UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 1.0);
// 获得图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 设置一个范围
CGRect rect = CGRectMake(0, 0, self.imageView.frame.size.width, self.imageView.frame.size.height);
// 根据一个rect创建一个椭圆
CGContextAddEllipseInRect(ctx, rect);
// 裁剪
CGContextClip(ctx);
// 将原照片画到图形上下文
[self.imageView.image drawInRect:rect];
// 从上下文上获取剪裁后的照片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
self.imageView.image = newImage;
//开始对imageView进行画图
UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 1.0);
// 获得图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 设置一个范围
CGRect rect = CGRectMake(0, 0, self.imageView.frame.size.width, self.imageView.frame.size.height);
// 根据一个rect创建一个圆
CGContextAddEllipseInRect(ctx, rect);
// 裁剪
CGContextClip(ctx);
// 将原照片画到图形上下文
[self.imageView.image drawInRect:rect];
// 从上下文上获取剪裁后的照片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
self.imageView.image = newImage;
.layer.mask
属性,给UIView设置一个mask,让其圆角显示 //UIBezierPath的获取方法有很多,大家可以根据自己的需求来定制
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:self.imageView.bounds.size];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
//设置大小
maskLayer.frame = self.imageView.bounds;
//设置图形样子
maskLayer.path = maskPath.CGPath;
self.imageView.layer.mask = maskLayer;
今天太晚了要休息了,性能测试和具体原理探讨先放放,看看后面有没有时间补一下
今天太晚了要休息了,性能测试和具体原理探讨先放放,看看后面有没有时间补一下
iOS设置圆角的方法及指定圆角的位置
iOS UIBezierPath知识介绍
UIBezierPath介绍
原文:https://www.cnblogs.com/darkwing/p/11223039.html