美文网首页
如何高性能的给UIImageView加个圆角?

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

作者: 小屋新 | 来源:发表于2019-03-20 17:32 被阅读0次

我经常使用的方法:

imageview.layer.masksToBounds = Yes;
imageview.layer.cornerRadius = 5.0f;

但是这种方法会强制Core Animation提前渲染屏幕的离屏绘制,而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现。

正确的解决方案:使用绘图技术

- (UIImage *)circleImage {
// NO 代表透明
UIGraphicsBeginImageContextWithOptions(self.imageview.size, NO, 0.0);
// 获得上下文
CGContextRef cox = UIGraphicsGetCurrentContext();
// 添加一个圆
CGRect rect = CGRectMake(0, 0, self.imageview.size.width, self.imageview.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(image view.bounds.size, no, 1.0);
[[UIBezierPath bezierPathWithRoundedRect:imageview.bounds cornerRadius:50] addClip];
[anotherImage drawInRect:imageview.bounds];
imageview.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.view addSubview:imageView];

相关文章

网友评论

      本文标题:如何高性能的给UIImageView加个圆角?

      本文链接:https://www.haomeiwen.com/subject/tdftvqtx.html