在我的项目中,我想创建虚线的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,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44439007/