异步裁剪绘制圆角图形

一看到如何绘制一个圆角图形,不少时候想到的都是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];

运行的结果:

 

相关文章
相关标签/搜索