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

不好的解决方案

使用下面的方式会强制Core Animation提前渲染屏幕的离屏绘制,而离

屏绘制就会给性能带来负面影响,会有卡顿的现象出现

self.view.layer.cornerRadius=5;

self.view.layer.masksToBounds=YES;

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

- (UIImage*)circleImage

{

// NO代表透明

UIGraphicsBeginImageContextWithOptions(self.size,NO,0.0);

//获得上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

//添加一个圆

CGRectrect = CGRectMake(0,0,self.size.width,self.size.height);

CGContextAddEllipseInRect(ctx, rect);

//裁剪CGContextClip(ctx);

//将图片画上去

[selfdrawInRect:rect];

UIImage*image = UIGraphicsGetImageFromCurrentImageContext();

//关闭上下文UIGraphicsEndImageContext();

return image;

}

还有一种方案:使用了贝塞尔曲线"切割"个这个图片,给UIImageView添加了的圆角,其实也是通过绘图技术来实现的

UIImageView*imageView = [[UIImageViewalloc]

initWithFrame:CGRectMake(0,0,100,100)];

imageView.center= CGPointMake(200,300);

UIImage*anotherImage = [UIImageimageNamed:@"image"];

UIGraphicsBeginImageContextWithOptions(imageView.bounds.

size,NO,1.0);

[[UIBezierPathbezierPathWithRoundedRect:imageView.bounds

cornerRadius:50] addClip];

[anotherImage drawInRect:imageView.bounds];

imageView.image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

[self.viewaddSubview:imageView];

你可能感兴趣的:(如何高性能的给 UIImageView 加个圆角?)