Swift 实现部分圆角
2017-09-23 15:21
2026 查看
圆角一直是开发中经常遇到的问题。
为了实现部分圆角的效果,我去查了一下用 OC 如何实现。
可惜直接语法转换以后是不能用的,因为
我最终放弃了,选择了另一种实现:
把他用 Swift 的方式实现:
调用的时候需要注意一点:
需要转换一下类型:
在
在性能方面,我简单做了个1000行圆角Button和Label的表格,滚动起来十分流畅。用instrument种的CoreAnimation测试,可能会产生离屏渲染。根据WWDC 2014: Advanced Graphics and Animations for iOS Apps,系统圆角使用 mask 的方式实现的,现在无论硬件性能还是优化肯定要比当年做的好。
为了实现部分圆角的效果,我去查了一下用 OC 如何实现。
可惜直接语法转换以后是不能用的,因为
mas_maskContraints(是 Masonry 这个库的语法,感谢isaced)方法在 Swift 中我并没有找到。在 Stack Overflow 中的搜索结果更加感人:
我最终放弃了,选择了另一种实现:
把他用 Swift 的方式实现:
extension UIView { /// 部分圆角 /// /// - Parameters: /// - corners: 需要实现为圆角的角,可传入多个 /// - radii: 圆角半径 func corner(byRoundingCorners corners: UIRectCorner, radii: CGFloat) { let maskPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radii, height: radii)) let maskLayer = CAShapeLayer() maskLayer.frame = self.bounds maskLayer.path = maskPath.cgPath self.layer.mask = maskLayer } }
调用的时候需要注意一点:
// 调用没有任何问题,将左上角与右上角设为圆角。 button.corner(byRoundingCorners: [UIRectCorner.topLeft, UIRectCorner.topRight], radii: 5) // 编译错误 let corners = [UIRectCorner.topLeft, UIRectCorner.topRight] button.corner(byRoundingCorners: corners, radii: 5)
需要转换一下类型:
let corners: UIRectCorner = [UIRectCorner.bottomLeft, UIRectCorner.bottomRight] // 类型可省略 let corners: UIRectCorner = [.bottomLeft,.bottomRight]
在
UIBerizePath类中,我们看到的
byRoundingCorners参数接收的是一个
UIRectCorner,并非数组类型,所以需要做一步类型转换,同时设置多个圆角。
在性能方面,我简单做了个1000行圆角Button和Label的表格,滚动起来十分流畅。用instrument种的CoreAnimation测试,可能会产生离屏渲染。根据WWDC 2014: Advanced Graphics and Animations for iOS Apps,系统圆角使用 mask 的方式实现的,现在无论硬件性能还是优化肯定要比当年做的好。
相关文章推荐
- swift实现导航栏上展示城市名称,城市名称过长则隐藏部分
- 详解Android图片(背景)圆角,并实现半部分圆角
- 自定义部分圆角的实现
- 接口实现分离(漫谈C#和swift的部分实现拓展功能)
- 详解Android图片(背景)圆角,并实现半部分圆角
- swift实现圆角的设置
- 实现上半部分是直角,下半部分是圆角半圆角的效果
- 对uiview实现部分圆角
- iOS圆角view的Swift实现(利用Core Graphics绘制)
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- oracle数据库表部分字段双向同步,利用包和触发器实现(转载)
- Python调用DLL实现部分ADB功能
- Android之TextView实现文字过长时省略部分或者滚动显示
- Android圆角边框代码实现
- swift 用协议实现代理传值功能
- 圆角效果实现,圆角效果对性能的影响及优化
- 圆角实现
- cocos2d-x 基于CCClippingNode实现CCLayer遮罩功能,在滑动时超出剪切区域的实现显示部分的效果,不需要再借助其他sprite来遮挡了
- Java根据word模板生成word文档之后台解析和实现及部分代码(三)G
- swift开发笔记22 在表格的单元格中实现条件跳转