在我的项目中,我想创建虚线的uibutton,如图所示。我是否也可以更改虚线颜色?

最佳答案

正如评论和答案所建议的,您可以使用图像,但是我们可以使用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
    }

}


可以这样使用(请注意,我在这里使用框架是因为我在操场上对其进行了测试,更常见的用法是通过情节提要/ 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()


产生这个:

ios - 如何创建虚线的uibutton-LMLPHP



旁注:此示例是入门的快速方法。例如,您可以添加自定义设置器来处理线条颜色和图案。还要注意,我通过指定一种模式来“欺骗”该模式,该模式填充了以短划线而不是间隙结尾的按钮的整个宽度,而不是动态地计算长度(对于对此解决方案感兴趣的人,可以作为练习) :))

关于ios - 如何创建虚线的uibutton,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44439007/

10-14 15:33