iOS图片圆角的裁剪优化
2016-07-25 本文已影响2025人
断剑
前面已经介绍过一种给UI控件设置圆角的方法了,今天给大家介绍一种性能更加优化的为图片设置圆角的方法
Xib中设置控件的圆角、边框效果
当我们在项目中显示图片的时候,如果想要将正方形的图片转换为原型图片的话,如果使用layer进行设置有时就会有一点点卡(特别是在tableView中进行显示的时候)
- 通常的解决的办法就是通过Quartz2D将图形绘制出一张圆形图片来进行显示。
1.创建UIImage的分类实现圆角方法
#import <UIKit/UIKit.h>
@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 <UIKit/UIKit.h>
@interface UIImageView (ZZYImageView)
- (void)setCircleImage:(NSString *)imageUrl withPlaceholderImage:(NSString *)placeholderImageName;
@end
#import "UIImageView+ZZYImageView.h"
#import <UIImageView+WebCache.h>
#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