iOS给UIImageView添加圆角的三种方法

前言

在iOS开发中我们经常会遇到给UIImageView添加圆角,如:给用户头像设置圆角等。在这里记录一下使用过的三种方法。

方法一:通过设置UIView的layer来设置圆角

    UIImageView *imgView = [UIImageView new];
    imgView.image = [UIImage imageNamed:@"aa"];
    imgView.layer.cornerRadius  = imgView.frame.size.width / 2;
    imgView.layer.masksToBounds = YES;

此方法的有个缺点是:会强制Core Animation提前渲染屏幕的离屏绘制, 而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现

方法二:通过Graphics绘制图片,将图片裁剪成圆角

- (UIImage *)clipImage1:(UIImage *)image {
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
    
    // 获取上下文
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    
    // 添加一个圆
    CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
    CGContextAddEllipseInRect(contextRef, rect);
    CGContextClip(contextRef);
    
    // 画图片
    [image drawInRect:rect];
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return newImage;
}

裁剪后设置图片即可

方法三: 依然是绘制图片,这次是通过贝塞尔曲线绘制图片

- (UIImage *)clipImage2:(UIImage *)image {
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 1.0);
    
    CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
    [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:image.size.width / 2] addClip];
    
    [image drawInRect:rect];
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}

绘制后设置UIImageView的图片即可

总结:

以上设置图片圆角的三种方法,在使用过程中各有优缺点,需要根据实际情况具体判断使用方法。

另外推荐一下我的导航栏联动库:GKNavigationController

你可能感兴趣的:(iOS给UIImageView添加圆角的三种方法)