本文一共提供三種控件顯示圓形圖片的方法,針對不同的使用場景,請自行選擇合適的方法。
方法一:
1.1拿到圖片UIImage *image;
1.2開啟一個圖形上下文 設(shè)置圖形上下文的siz 等于圖片size;
UIGraphicsBeginImageContext(image.size);
1.3利用貝塞爾曲線,設(shè)置一個圓形裁剪區(qū)域(設(shè)置一個矩形的內(nèi)切圓/內(nèi)切橢圓);
UIBezierPath *path =[UIBezierPath bezierPathWithOvalInRect:CGRectMake( 0, 0, image.size.width, image.size.height)];
1.4拿到貝塞爾曲線對象 添加裁剪;
[path addClip];
1.5將圖片畫到圖像上下文上
由于圖像上下文size和圖片的size設(shè)置一樣 所以可以設(shè)置point為零點;
[image drawAtPoint:CGPointZero];
1.6從當(dāng)前的圖像上下文中獲取圖片;
image = UIGraphicsGetImageFromCurrentImageContext();
1.7雖然此時已經(jīng)拿到 裁剪變?yōu)閳A形的圖片image,但是千萬不要忘了最后還有重要的一個步驟,那就是關(guān)閉圖形上下文,這個步驟特別容易讓人忘記,切記!
UIGraphicsEndImageContext();
簡單的幾個步驟就完成了一個正圓形圖片的裁剪功能,當(dāng)然還有我們更加簡單的方式哦,那就是接下來的方法二。
方法二:
2.1拿到你要設(shè)置的UIImageView *imageV;
2.2設(shè)置imageV 的layer層的圓角半徑;
2.3拿到imageV的layer層,并且告訴layer將位于它之下的layer都遮蓋住;
兩個步驟解決,簡單明了,但是此方法會帶來一定的性能問題。
即:會觸發(fā)離屏渲染,比較消耗性能。比如當(dāng)一個頁面上有十幾頭像這樣設(shè)置了圓角,那么會明顯感覺到卡頓。
注意:png圖片UIImageView處理圓角是不會產(chǎn)生離屏渲染的。(ios9.0之后不會離屏渲染,ios9.0之前還是會離屏渲染)。
代碼如下:
imageV.layer.cornerRadius = self.iconImageV.tml_width *0.5;
imageV.layer.masksToBounds =YES;
當(dāng)然,如果你一行代碼也不寫 也想設(shè)置圓角也是可以的,那就是我么接下來的第三種方法。
方法三:
如果你是在xib中添加的UIImageView的話,這里還提供另外一種不需要編寫一行代碼的方法,詳細(xì)請參照如下圖片中指示:
第一個屬性:layer.cornerRadius
第二個屬性:layer.masksToBounds
第一步:
第二步:
總結(jié):
以上三種方法都可以達(dá)到同樣的效果,具體選擇哪一種,視情況而定!
此外,第三中方法中涉及運(yùn)行時方面的知識,具體原理就不在此做過多解釋。同時也是三種方法中最為裝B的方法,溫馨提示:裝B雖好,但要慎用!