一看到如何繪製一個圓角圖形,不少時候想到的都是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];
運行的結果: