不好的解决方案:
使用下面的方式会强制Core Animation提前渲染屏幕的离屏绘制, 而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现。
self.view.layer.cornerRadius =5.0f;
self.view.layer.masksToBounds =YES;
正确的解决方案:使用绘图技术
- (UIImage*)circleImage {
UIGraphicsBeginImageContextWithOptions(self.size,NO,0.0); // NO代表透明
CGContextRefctx =UIGraphicsGetCurrentContext(); // 获得上下文
CGRectrect =CGRectMake(0,0,self.size.width,self.size.height);CGContextAddEllipseInRect(ctx, rect);
CGContextClip(ctx); // 添加一个圆 裁剪
// 将图片画上去
[selfdrawInRect:rect];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();returnimage;}
还有一种方案:使用了贝塞尔曲线"切割"个这个图片, 给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.view addSubview:imageView];
网友评论