在我們開發(fā)中經(jīng)常會對一些圖片進行圓角處理君纫,這樣會讓應用看起來更加的美觀奸鬓,設置圓角有多種方法竿开,但并不是每種都是性能很好的谱仪。
常見的方法有:
(1)設置layer層的圓角大小玻熙,經(jīng)常我們還會設置masksToBounds代碼如下:
_imageView.layer.cornerRadius = 88;
_imageView.layer.masksToBounds = YES;
這樣做對于少量的圖片否彩,這個沒有什么問題,但是對于獲取的大量數(shù)據(jù)列表嗦随,這時候列荔,UITableView滑動可能不是那么流暢,屏幕的幀數(shù)下降枚尼,影響用戶體驗贴浙。
(2)使用layer層mask遮障和CAShapeLayer
創(chuàng)建圓形的CAShapeLayer對象,設置為view的mask屬性署恍,這樣也可以達到圓角的效果崎溃,但是這樣既增加了CAShapeLayer對象,同時使用mask屬性帶來了離屏渲染盯质,導致屏幕的幀數(shù)下降袁串,滑動不流暢,這種方法個人覺得不可取呼巷。
(3)是用一張帶圓形透明的圖片
這種方法就是將一張帶有圓形透明的圖片放在UIImageView上囱修,透過圓形部分,正好看到圓形圖片的效果王悍,這樣同樣可以達到圓角圖片的效果破镰,但是這樣會造成圖層混合,這樣顯示時压储,需要考慮上下兩層視圖的綜合的顯示效果鲜漩,增加了cup的計算的工作量。
(4)自己繪制圓角
就是自己根據(jù)圓角的大小對圖片進行繪制集惋,繪制出帶有圓角的圖片以供使用宇整。
在項目中我選擇的是第四種方案,由于圖片資源都是從服務器獲取的芋膘,獲取圖片用的是SDWebImage第三方庫鳞青,于是就對下載的圖片(當然是需要繪制霸饲,不是所有的)進行了圓角繪制,然后其他的還是和SDWebImage處理的一樣臂拓,這里僅僅對需要繪制圓角的圖片厚脉,進行了圓角繪制,當然胶惰,保存本地的也是經(jīng)過圓角處理的圖片傻工,以備下次使用。
//繪制圓角的代碼
+(UIImage*)drawCornerImageWithOrgImage:(UIImage*)image size:(CGSize)size corner:(CGFloat)corner
{
if (scale == 0.0) {
scale = [UIScreen mainScreen].scale;
}
UIImage *newImage = nil;
UIGraphicsBeginImageContextWithOptions(size, NO, scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, size.height);
CGContextScaleCTM(context, 1, -1);
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, size.width,size.height) cornerRadius:corner];
CGContextAddPath(context, path.CGPath);
CGContextClip(context);
CGContextDrawImage(context, CGRectMake(0, 0, size.width, size.height), image.CGImage);
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGContextRelease(context);
return newImage;
}
項目驗證孵滞,這種處理效果還是可以的中捆,滑動很流暢的。