/*********** *********** 第一种 *********** ***********/
self.imgView.layer.cornerRadius = 50;
self.imgView.layer.masksToBounds = YES;
/*********** *********** 第二种 *********** ***********/
// GEView.h
// 图片裁剪
#import <UIKit/UIKit.h>
@interface GEView : UIView
@end
// GEView.m
// 图片裁剪
#import "GEView.h"
@implementation GEView
- (void)drawRect:(CGRect)rect {
//1.裁剪--必须要先裁剪
//裁剪是裁剪的上下文
//剪切出来显示区域
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(ctx, rect);
CGContextClip(ctx);
//2.有图片
//绘制的图片是在原来的上下文为坐标系的
UIImage *image = [UIImage imageNamed:@"me2"];
[image drawAtPoint:CGPointZero];
}
@end
/*********** *********** 第三种 *********** ***********/
- (UIImage *)imageWithName:(NSString *)imageName {
UIImage *image = [UIImage imageNamed:imageName];
//1.开启上下文
UIGraphicsBeginImageContext(image.size);
//2.获得上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 3.裁剪
//3.1 准备裁剪路径
CGContextAddArc(ctx, image.size.width/2, image.size.height/2, image.size.width/2, 0, M_PI * 2, 1);
// 3.2 裁剪上下文
CGContextClip(ctx);
//4.绘制图片
[image drawAtPoint:CGPointZero];
//5.从上下文中获得最新的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
//6.关闭上下文
UIGraphicsEndImageContext();
return newImage;
}
// 使用
self.imageView.image = [self imageWithName:@"me2”];
/*********** *********** 第四种 *********** ***********/
// 第四种方法:使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角
- (void)test4 {
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
imageView.image = [UIImage imageNamed:@"me2"];
//开始对imageView进行画图
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
//使用贝塞尔曲线画出一个圆形图
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];
[imageView drawRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
//结束画图
UIGraphicsEndImageContext();
[self.view addSubview:imageView];
}
/*********** *********** 第五种 *********** ***********/
// 第五种方法:使用CAShapeLayer和UIBezierPath设置圆角
-(void)test5 {
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 500, 100, 100)];
imageView.image = [UIImage imageNamed:@"me2"];
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
//设置大小
maskLayer.frame = imageView.bounds;
//设置图形样子
maskLayer.path = maskPath.CGPath;
imageView.layer.mask = maskLayer;
[self.view addSubview:imageView];
}
/*********** *********** 第六种 *********** ***********/
/*
第六种方法:通过混合图层
此方法就是在要添加圆角的视图上再叠加一个部分透明的视图,只对圆角部分进行遮挡。其实就是中间圆形部分透明,不遮挡底部的控件,不过同时也需要遮挡颜色和view背景色一致才行。
此方法虽然是最优解,没有离屏渲染,没有额外的CPU计算,但是应用范围有限。
*/