ios - 是否可以在不使用 UIBezierPath 的情况下绘制虚线

标签 ios swift core-graphics

我知道使用 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()

        }
    }

结果是:

enter image description here

有什么问题吗?

最佳答案

想想……

线宽为10。 线帽是圆形的。 所以线帽的半径是5。

注意线结束于线帽的中心点(而不是线帽的末端)。

每条破折号的长度为3,两行之间的间距为2。

所以帽的半径比线之间的间隙大得多。所以每一行都与下一行重叠。

试着让线的长度像...

[3, 12]

这应该使线长 3 点,上限半径为 5,然后上限之间的间隙为 2 (12 - 5 - 5)。

关于ios - 是否可以在不使用 UIBezierPath 的情况下绘制虚线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998070/

相关文章:

ios - iOS7 中选定的 UITableViewCell 的奇怪行为

ios - Swift 2.2 中 init 的使用不明确

ios - 在不损失质量的情况下使 UIImage 成为一个圆圈? ( swift )

ios - 显示 View Controller 的 viewDidLoad 在显示的 View Controller 关闭后被调用

ios - 旋转 UIView 后如何使边缘平滑

ios - 黑暗模式 :- Color inverting not working for WKWebview Tableview Content

swift - MKMapView 不是在 Swift 中缩小 map 时的聚类注释

ios - 如何在 View 中通过 CAShapeLayer 绘制垂直虚线?

ios - 调整视频大小并保持 1 :1 scale

objective-c - CoreGraphics 填充路径和描边路径