一看到如何绘制一个圆角图形,不少时候想到的都是layer中的方法,也能达到绘制圆角的效果:异步
例如:async
// 建立一个UIImageView性能
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];spa
// 设置imageView的图片图片
imageView.image = [UIImage imageNamed:@"161H62559-0.jpg"];ip
// 设置圆角get
imageView.layer.cornerRadius = 100;it
imageView.layer.masksToBounds = YES;io
// 添加到view上table
[self.view addSubview:imageView];
运行效果为:
虽然这样也能绘制出圆角可是性能不太好,若是在tableView上不断的滚动,就要不断地去重绘,且若是设置颜色的话,最好不要设置颜色的透明度,由于这样会严重的影响性能。
比较好的一个方法就是经过异步绘制来裁剪圆角:
异步绘制的方法:
在UIImage的分类中:
@implementation UIImage (Extension)
- (void)cj_cornerImageWithSize:(CGSize)size Color:(UIColor *)fillColor completion:(void(^)(UIImage *image))completion {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 1. 开启图形上下文
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
// 2. 设置填充颜色
CGRect rect = CGRectMake(0, 0, size.width, size.height);
[fillColor setFill];
UIRectFill(rect);
// 3.贝塞尔曲线
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect];
[path addClip];
// 4.绘制图像
[self drawInRect:rect];
// 5.绘制的图像
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 6.关闭图形上下文
UIGraphicsEndImageContext();
// 7.回调
dispatch_async(dispatch_get_main_queue(), ^{
if (completion != nil) {
completion(image);
}
});
});
}
@end
须要的时候调用此方法:
// 建立一个UIImageView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
// 设置图片
UIImage *image = [UIImage imageNamed:@"161H62559-0.jpg"];
// 设置圆角
[image cj_cornerImageWithSize:imageView.bounds.size Color:[UIColor whiteColor] completion:^(UIImage *image){
imageView.image = image;
}];
[self.view addSubview:imageView];
运行的结果: