视图实现圆角效果的三种方法及比较
2012-05-02 10:12
369 查看
首先是没有圆角效果的。
然后是带圆角效果的。
通过代码,至少有三种方法可以为视图加上圆角效果。附例子:
https://github.com/weipin/RoundedCorner
方法一、layer.cornerRadius
第一种方法最简单,通过层对象的cornerRadius属性实现圆角效果,代码如下:
缺点是会有2次rending passes。首先off-screen画出带圆角的图,然后在视图上画第二次。
方法二、通过UIBezierPath对象设置带圆角的作图区域
这种方法的好处是只有一次rending pass,是三种方法中效率最高的。缺点是需要override视图。代码如下:
[[UIColor whiteColor] set];
UIRectFill(bounds);
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip];
方法三、通过另一张mask图创建新图
首先需要一张mask图,然后将这张mask图和原图合成,得到带圆角的新图。效率和方法一类似,合成新图等同于在off-screen作图。该方法的优点是可以不局限于圆角,全凭mask图控制。
总结:
如果要效率(例如要提高table view的滚动帧数),就多用方法二。要方便,自然是方法一。如果需要的特殊形状UIBezierPath对象无法构成,则考虑方法三。
例子:
https://github.com/weipin/RoundedCorner
例子中,tab 1是无圆角效果,其他三个tab各自对应三种方法。
转载自: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各自对应三种方法。
转载自:http://www.xiaweipin.com/archives/98
相关文章推荐
- 如何实现视图圆角效果的三种方法及比较——董鑫
- 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- iOS 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- IOS_视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法
- ios view实现圆角效果的三种方法及比较
- 三种方法实现弹出框边框半透明和圆角的效果
- 纯CSS+DIV实现圆角的三种方法(create a round corner DIV by pure CSS)
- CSS实现圆角的三种方法以下直接给出代码:
- C++ Builder下三种UDP通信实现方法的比较
- windows之实现3D立体效果的三种方法
- cocos2dx之实现扑克牌翻转效果的三种方法
- Html+css、javascript和JQuery三种方法实现导航条下拉菜单的炫酷效果
- 比较两种方法实现数据统计效果
- C++ Builder下三种UDP通信实现方法的比较 选择自 findheart 的 Blog