Swift 实现部分圆角

圆角一直是开发中经常遇到的问题。

为了实现部分圆角的效果,我去查了一下用 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 的方式实现的,现在无论硬件性能还是优化肯定要比当年做的好。

时间: 2024-10-03 13:45:44

Swift 实现部分圆角的相关文章

使用swift在sprite中显示圆角UIButton按钮

我对objective-C不是很熟,UIKit以前没有用过,SpriteKit也只看了遍教程,然后看了一遍swift语言教程,此时开始编写这个程序,所以遇到的问题比较小儿科,解决方法也是曲线救国,希望有高人指点解决这些问题的简单方法,有好的解决方法后,我会随时进行本日志的修改,以免误导他人. 程序界面很是简单 然后点击中间的游戏区域,会roll色子,随机产生1~6的数字,飞机前进若干步,遇到梯子向前跳若干步,而遇到蛇则后退若干步,指导抵达25格,游戏结束. 上面有一个标签,显示游戏状态和Roll

Swift 圆角设置

故事面板中设置圆角(storyboard) Key Path layer.borderWidth(边框宽度) layer.cornerRadius(圆角弧度) layer.borderColor(边框颜色) Type       Number    Number     Color Value 2 5   (选择颜色) 同理 swift方法 self.view.layer.borderColor = UIColor.grayColor().CGColor; self.view.layer.bor

swift UIImage加载远程图片和圆角矩形

UIImage这个对象是swift中的图像类,可以使用UIImageView加载显示到View上. 以下是UIImage的构造函数: init(named name: String!) -> UIImage // load from main bundle init(named name: String!, inBundle bundle: NSBundle!, compatibleWithTraitCollection traitCollection: UITraitCollection!)

swift – 具有圆角和背景颜色的NSButton

http://www.voidcn.com/article/p-srkqadwc-btx.html 我想要一个简单的按钮(带圆角的按钮),并添加背景. 我已经尝试过两件事情: 1 – 使用圆形按钮图像:这是很好的,直到我需要缩放按钮,这导致圆形部分看起来丑陋. 2 – 扩展按钮并添加颜色 – 但是当我点击按钮时,我有麻烦 – 我希望"推"状态与"常规"状态处于相同的颜色,但情况并非如此. 这是我用来扩展按钮的代码: override func drawRect(di

swift:使用协议protocol设置颜色,UIImage的切圆角ImageWithCornerRadius

//使用协议 方便以后切换颜色配置文件.或者做主题配色之类乱七八糟产品经理最爱的功能 protocol V2EXColorProtocol{ var v2_backgroundColor: UIColor { get } var v2_navigationBarTintColor: UIColor { get } var v2_TopicListTitleColor : UIColor { get } var v2_TopicListUserNameColor : UIColor { get }

Swift开发教程--设置圆角Button和圆角边框TextView

设置圆角Button button.layer.borderColor = UIColor.whiteColor().CGColor; button.layer.borderWidth = 2; button.layer.cornerRadius = 16; 设置圆角边框TextView inputTextView.layer.borderColor = UIColor(red: 60/255, green: 40/255, blue: 129/255, alpha: 1).CGColor; i

Swift开发教程--如何给UITextView添加圆角边框

直接上代码: self.textView.layer.borderColor = UIColor(red: 60/255, green: 40/255, blue: 129/255, alpha: 1).CGColor; self.textView.layer.borderWidth = 2; self.textView.layer.cornerRadius = 16; 版权声明:本文为博主原创文章,未经博主允许不得转载.

Xcode快捷键、小技巧与xib圆角设置

快捷键: 1.StoryBoard技巧 当你想直接在view中选择自己想要的元素时,但是又碍于一个view上叠加的元素太多很难直接选中,那么在这时,你同时按住键盘上的shift和 control键,然后在你想选择的元素上点击鼠标,会弹出一个窗口,上面罗列了鼠标点击的位置下所有存在的元素,然后你再去进行选择会变的异常的简单. 参考:三十而立,从零开始学ios开发(十七):Storyboards(上) - minglz - 博客园 2.快速定位到左下角搜索框的快捷键: 有时候想搜索一个文件,常规的做

Swift - 给图片和按钮添加阴影边框

最近比较忙,想要做的事情有很多,能做出来的就只有一部份,我觉得也许是我没有计划和规律造成的,我需要坚持下去,今天写了一个swift2.0给按钮或者图片添加阴影的效果,就当做笔记吧:-) Swift Code: let image1 = UIImageView(frame: CGRectMake(20,50,self.view.frame.width-50,180)) image1.image = UIImage(named: "sea.jpg") self.view.addSubvie