您的位置:首页 > 移动开发 > IOS开发

ios view实现圆角效果的三种方法及比较

2013-01-25 12:48 579 查看
方法一、layer.cornerRadius;方法二、通过UIBezierPath对象设置带圆角的作图区域

首先是没有圆角效果的



然后是带圆角效果的



通过代码,至少有三种方法可以为视图加上圆角效果。附例子:

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各自对应三种方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: