我知道使用 UIBezierPath() 来绘制虚线,例如:
let path = UIBezierPath()
path.setLineDash([CGFloat(4), CGFloat(4)], count: 2, phase: 0)
path.lineCapStyle = CGLineCap.round
path.move(to: startPoint)
path.addLine(to: endPoint)
path.stroke()
它工作正常。但是我怎么能在上下文中画一条虚线呢?就像下面的代码可以画一条实线,不管我是否添加
context.setLineDash(phase: 3, lengths: [3,2])
完整代码:
override func draw(_ rect: CGRect) {
if let context = UIGraphicsGetCurrentContext() {
let startPoint = CGPoint(x: 50, y: 10)
let endPoint = CGPoint(x: rect.width-100, y: 10)
context.setLineDash(phase: 3, lengths: [3,2])
context.setLineWidth(10)
context.move(to: startPoint)
context.addLine(to: endPoint)
context.setStrokeColor(UIColor.red.cgColor)
context.setLineCap(.round)
context.strokePath()
}
}
结果是:
有什么问题吗?
最佳答案
想想……
线宽为10。 线帽是圆形的。 所以线帽的半径是5。
注意线结束于线帽的中心点(而不是线帽的末端)。
每条破折号的长度为3,两行之间的间距为2。
所以帽的半径比线之间的间隙大得多。所以每一行都与下一行重叠。
试着让线的长度像...
[3, 12]
这应该使线长 3 点,上限半径为 5,然后上限之间的间隙为 2 (12 - 5 - 5)。
关于ios - 是否可以在不使用 UIBezierPath 的情况下绘制虚线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998070/