码迷,mamicode.com
首页 > 其他好文 > 详细

如何高性能的给 UIImageView 加个圆角?

时间:2017-09-01 23:03:27      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:iter   mask   rect   1.0   bounds   send   com   point   技术   

  • 不好的解决方案

    • 使用下面的方式会强制Core Animation提前渲染屏幕的离屏绘制, 而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现

      self.view.layer.cornerRadius = 5;
      self.view.layer.masksToBounds = YES;
      
  • 正确的解决方案:使用绘图技术

- (UIImage *)circleImage
{
    // NO代表透明
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);

    // 获得上下文
    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;
}
  • 还有一种方案:使用了贝塞尔曲线"切割"个这个图片, 给UIImageView 添加了的圆角,其实也是通过绘图技术来实现的
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.center = CGPointMake(200, 300);
UIImage *anotherImage = [UIImage imageNamed:@"image"];
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds
                       cornerRadius:50] addClip];
[anotherImage drawInRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.view addSubview:imageView];


下面这篇博客写的非常不错,推荐看看:对于图片的处理
http://www.jianshu.com/p/4e22c6ac114d

如何高性能的给 UIImageView 加个圆角?

标签:iter   mask   rect   1.0   bounds   send   com   point   技术   

原文地址:http://www.cnblogs.com/huangzs/p/7465315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!