[一句秒懂]ios圆形图片显示

纵饮孤独 提交于 2019-12-04 15:25:35

简介:

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];

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!