如何创建虚线uibutton

时间:2017-06-08 14:50:58

标签: ios objective-c swift3 uibutton storyboard

在我的项目中,我希望创建如此pricture中所示的虚线uibutton。有没有办法改变虚线颜色?

1 个答案:

答案 0 :(得分:1)

正如评论和答案所暗示的那样,可以使用图片,但我们可以使用CAShapeLayer代替并控制每个方面。

或许这样的事情:

class DashedButton: UIButton {

    var dashedLine: CAShapeLayer!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        dashedLine             = CAShapeLayer()
        dashedLine.strokeColor = UIColor.white.cgColor
        dashedLine.lineWidth   = 4
        layer.addSublayer(dashedLine)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        let path = UIBezierPath()
        path.move(to: CGPoint(x: bounds.minX, y: bounds.maxY))
        path.addLine(to: CGPoint(x: bounds.maxX, y: bounds.maxY))
        dashedLine.lineDashPattern = [12, 7]
        dashedLine.path = path.cgPath
    }

}

可以使用(注意我在这里使用框架因为我在操场上测试它,更常见的用途是通过storyboard / xib文件进行实例化):

let button = DashedButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30))

button.setTitle("Forgot Password?", for: .normal)
button.dashedLine.strokeColor = UIColor.orange.cgColor
button.sizeToFit()

产生这个:

enter image description here

Sidenote :此示例是帮助您入门的快速方法。您可以添加自定义设置器,以处理线条着色和图案。还要注意我已经被骗了#34;在某种程度上,通过指定一个模式来填充以虚线而不是间隙结尾的按钮的整个宽度,而不是动态计算长度(对于对此解决方案感兴趣的任何人,左边是练习))