视图实现圆角效果的三种方法及比较
2015-07-30 11:11
447 查看
本篇文章主要介绍了"视图实现圆角效果的三种方法及比较",主要涉及到视图实现圆角效果的三种方法及比较方面的内容,对于视图实现圆角效果的三种方法及比较感兴趣的同学可以参考一下。
方法一、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.cocoachina.com/applenews/devnews/2013/0104/5461.html
方法一、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.cocoachina.com/applenews/devnews/2013/0104/5461.html
相关文章推荐
- 如何选择机器学习算法
- 有关自动目视解译系统的假设
- 使用eclipse遇到问题:the-package-collides-with-a-type
- 每日一招:散户巧寻主力筹码的方法
- 未解——Matlab solve函数
- 数据库管理(12)
- Python 简单爬虫功能实现
- Another MySQL daemon already running with the same unix socket
- CGRectGetMaxX&CGRectGetMidX的用法
- 点滴0
- ios开发学习笔记(转载)
- 有趣的机器学习
- 数据结构——单链表(链表操作算法集合)
- URAL 1941
- 有关人工智能的假设
- C#关于事件的几个好例子
- Validate Binary Search Tree
- linkscrpit
- dicom网络通讯入门(3)
- 从头开始写项目Makefile(八):模式规则 .