iOS图片圆角的裁剪优化

前面已经介绍过一种给UI控件设置圆角的方法了,今天给大家介绍一种性能更加优化的为图片设置圆角的方法
Xib中设置控件的圆角、边框效果
当我们在项目中显示图片的时候,如果想要将正方形的图片转换为原型图片的话,如果使用layer进行设置有时就会有一点点卡(特别是在tableView中进行显示的时候)

  • 通常的解决的办法就是通过Quartz2D将图形绘制出一张圆形图片来进行显示。

1.创建UIImage的分类实现圆角方法

#import 

@interface UIImage (ZZYCircleImage)

- (UIImage *)circleImage;

@end


#import "UIImage+ZZYCircleImage.h"

@implementation UIImage (ZZYCircleImage)

- (UIImage *)circleImage
{
    
    //1.开启图片图形上下文:注意设置透明度为非透明
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
    //2.开启图形上下文
    CGContextRef ref = UIGraphicsGetCurrentContext();
    //3.绘制圆形区域(此处根据宽度来设置)
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.width);
    CGContextAddEllipseInRect(ref, rect);
    //4.裁剪绘图区域
    CGContextClip(ref);
    
    //5.绘制图片
    [self drawInRect:rect];
    
    //6.获取图片
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    //7.关闭图形上下文
    UIGraphicsEndImageContext();
    
    return image;
}

@end

2.扩展——SDWebImage的简单封装

#import 

@interface UIImageView (ZZYImageView)

- (void)setCircleImage:(NSString *)imageUrl withPlaceholderImage:(NSString *)placeholderImageName;

@end

#import "UIImageView+ZZYImageView.h"
#import 
#import "UIImage+ZZYCircleImage.h"

@implementation UIImageView (ZZYImageView)

- (void)setCircleImage:(NSString *)imageUrl withPlaceholderImage:(NSString *)placeholderImageName
{
    UIImage * placeholderImage = [UIImage imageNamed:placeholderImageName];
    [self sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:placeholderImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        self.image = image ? [image circleImage]:[placeholderImage circleImage];
    }];
}



@end

你可能感兴趣的:(iOS图片圆角的裁剪优化)