iOS圖片設定圓角

黑暗森林的歌者發表於2018-02-26

一般我們在iOS開發的過程中設定圓角都是如下這樣設定的。 ###第一種

imageView.clipsToBounds = YES;
[imageView.layer setCornerRadius:50];
複製程式碼

這樣設定會觸發離屏渲染,比較消耗效能。比如當一個頁面上有十幾頭像這樣設定了圓角

會明顯感覺到卡頓。 這種就是最常用的,也是最耗效能的。

注意:ios9.0之後對UIImageView的圓角設定做了優化,UIImageView這樣設定圓角 不會觸發離屏渲染,ios9.0之前還是會觸發離屏渲染。而UIButton還是都會觸發離屏渲染。

###第二種

imageView.clipsToBounds = YES;
imageView.layer setCornerRadius:50];
imageView.layer.shouldRasterize = YES;
複製程式碼

shouldRasterize=YES設定光柵化,可以使離屏渲染的結果快取到記憶體中存為點陣圖, 使用的時候直接使用快取,節省了一直離屏渲染損耗的效能。

但是如果layer及sublayers常常改變的話,它就會一直不停的渲染及刪除快取重新 建立快取,所以這種情況下建議不要使用光柵化,這樣也是比較損耗效能的。

###第三種 這種方式效能最好,但是UIButton上不知道怎麼繪製,可以用UIimageView新增個 點選手勢當做UIButton使用

UIGraphicsBeginImageContextWithOptions(avatarImageView.bounds.size, NO, [UIScreen mainScreen].scale); 
[[UIBezierPath bezierPathWithRoundedRect:avatarImageView.bounds cornerRadius:50] addClip]; 
[image drawInRect:avatarImageView.bounds]; 
avatarImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext();
複製程式碼

這段方法可以寫在SDWebImage的completed回撥裡,也可以在UIImageView+WebCache.h 裡新增一個方法,isClipRound判斷是否切圓角,把上面繪製圓角的方法封裝到裡面。

相關文章