異步裁剪繪製圓角圖形

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

運行的結果:

 

相關文章
相關標籤/搜索