不好的解決方案
使用下面的方式會強制Core Animation提前渲染屏幕的離屏繪制,而離
屏繪制就會給性能帶來負面影響,會有卡頓的現(xiàn)象出現(xiàn)
self.view.layer.cornerRadius=5;
self.view.layer.masksToBounds=YES;
正確的解決方案:使用繪圖技術(shù)
- (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();
//關(guān)閉上下文UIGraphicsEndImageContext();
return image;
}
還有一種方案:使用了貝塞爾曲線"切割"個這個圖片,給UIImageView添加了的圓角,其實也是通過繪圖技術(shù)來實現(xiàn)的
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];