視圖實現圓角效果的三種方法

 

轉載自:http://www.xiaweipin.com/archives/98

首先是沒有圓角效果的。

然後是帶圓角效果的。

通過代碼,至少有三種方法可以爲視圖加上圓角效果。附例子:
https://github.com/weipin/RoundedCorner

方法一、layer.cornerRadius

第一種方法最簡單,通過層對象的cornerRadius屬性實現圓角效果,代碼如下:

view.layer.cornerRadius = 8.0;
view.layer.masksToBounds = YES;

缺點是會有2次rending passes。首先off-screen畫出帶圓角的圖,然後在視圖上畫第二次。

方法二、通過UIBezierPath對象設置帶圓角的作圖區域

這種方法的好處是隻有一次rending pass,是三種方法中效率最高的。缺點是需要override視圖。代碼如下:

- (void)drawRect:(CGRect)rect {
CGRect bounds = self.bounds;

[[UIColor whiteColor] set];
UIRectFill(bounds);

[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip];

[self.image drawInRect:bounds];
}

方法三、通過另一張mask圖創建新圖

首先需要一張mask圖,然後將這張mask圖和原圖合成,得到帶圓角的新圖。效率和方法一類似,合成新圖等同於在off-screen作圖。該方法的優點是可以不侷限於圓角,全憑mask圖控制。

總結:

如果要效率(例如要提高table view的滾動幀數),就多用方法二。要方便,自然是方法一。如果需要的特殊形狀UIBezierPath對象無法構成,則考慮方法三。

例子:
https://github.com/weipin/RoundedCorner

例子中,tab 1是無圓角效果,其他三個tab各自對應三種方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章