轉載自: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各自對應三種方法。