不好的解决方案:
使用下面的方式会强制 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);
[[UIBezierPathbezierPathWithRoundedRect:imageView.bounds cornerRadius:50] addClip];
[anotherImage drawInRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.view addSubview:imageView];