简介:
1:一般情况下,在tableView上显示一张圆形图片(从网络下载好的图片),按照常规方法设置layer图层的话,用户会感觉有些卡顿现象,不推荐使用!
2:现在我推荐的是一个比较流畅的做法:使用quartz2D绘制一个圆形上下文图形,然后剪切,将原来控件绘制上去会自动剪切成圆形,然后将网络下载图片贴上去即可!
步骤:
1-在image分类里面写一个方法,绘制成圆形图片
/**
* 返回一张圆形图片 (推荐使用)
*/
- (instancetype)circleImage;
/**
* 返回一张圆形图片
*/
+ (instancetype)circleImageNamed:(NSString *)name;
- (instancetype)circleImage
{
// 开启图形上下文
UIGraphicsBeginImageContext(self.size);
// 获得上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 矩形框
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
// 添加一个圆
CGContextAddEllipseInRect(ctx, rect);
// 裁剪(裁剪成刚才添加的图形形状)
CGContextClip(ctx);
// 往圆上面画一张图片
[self drawInRect:rect];
// 获得上下文中的图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭图形上下文
UIGraphicsEndImageContext();
return image;
}
+ (instancetype)circleImageNamed:(NSString *)name
{
return [[self imageNamed:name] circleImage];
}
2-在UIImageView中写一个分类方法:从网络下载下来的图片,通过SDWebImage框架异步下载和缓存图片,直接在这里处理网络下载下来的图片变成圆形图片即可
/**
* 设置圆形图像
*/
- (void)setHeader:(NSString *)url;
#pragma mark - 选择-设置圆形图像
- (void)setHeader:(NSString *)url
{
[self setCircleHeader:url];
}
#pragma mark - 矩形图像
- (void)setRectHeader:(NSString *)url
{
[self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"defaultUserIcon"]];
}
#pragma mark - 圆形图像
- (void)setCircleHeader:(NSString *)url
{
WS(weakSelf);
UIImage *placeholder = [[UIImage imageNamed:@"defaultUserIcon"] circleImage];
[self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:placeholder completed:
^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
// 如果图片下载失败,就不做任何处理,按照默认的做法:会显示占位图片
if (image == nil) return;
weakSelf.image = [image circleImage];
}];
}
3-开始使用了:一句话秒懂吧!
[self.rightImageView setHeader:model.avatar];
来源:oschina
链接:https://my.oschina.net/u/2684046/blog/693305