设置圆角

/*********** *********** 第一种 *********** ***********/
self.imgView.layer.cornerRadius = 50;
self.imgView.layer.masksToBounds = YES;
/*********** *********** 第二种 *********** ***********/
//  GEView.h
//  图片裁剪
#import 

@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计算,但是应用范围有限。
*/

你可能感兴趣的:(设置圆角)