一、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對象無法構成,則考慮方法三。