在我的项目中,我希望创建如此pricture中所示的虚线uibutton。有没有办法改变虚线颜色?
答案 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()
产生这个:
Sidenote :此示例是帮助您入门的快速方法。您可以添加自定义设置器,以处理线条着色和图案。还要注意我已经被骗了#34;在某种程度上,通过指定一个模式来填充以虚线而不是间隙结尾的按钮的整个宽度,而不是动态计算长度(对于对此解决方案感兴趣的任何人,左边是练习))