简介:缓存
1:通常状况下,在tableView上显示一张圆形图片(从网络下载好的图片),按照常规方法设置layer图层的话,用户会感受有些卡顿现象,不推荐使用!网络
2:如今我推荐的是一个比较流畅的作法:使用quartz2D绘制一个圆形上下文图形,而后剪切,将原来控件绘制上去会自动剪切成圆形,而后将网络下载图片贴上去便可!框架
步骤:异步
1-在image分类里面写一个方法,绘制成圆形图片url
/** * 返回一张圆形图片 (推荐使用) */ - (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框架异步下载和缓存图片,直接在这里处理网络下载下来的图片变成圆形图片便可spa
/** * 设置圆形图像 */ - (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-开始使用了:一句话秒懂吧!code
[self.rightImageView setHeader:model.avatar];