使用 strokeColor,从中心到圆周绘制一条线

With strokeColor, a line is drawn from the center to the circumference



我正在使用 swift 4.
我写了下面的代码,并尝试用笔画画一个圆。
但是,使用下面的代码我无法绘制我想要的圆。
问题是线是从圆心画到外围
(严格来说是朝向'startAngle'属性的坐标点)。

我想擦线,怎么办?

(我准备了一张图片。)

class Something{

    var line:[CAShapeLayer] = []
    var path:[UIBezierPath] = []

    func drawingNow(){
            let layer = CAShapeLayer()
            self.layer.addSublayer(layer)
            self.line.append(layer)

            let addPath: UIBezierPath = UIBezierPath()
            addPath.move(to: CGPoint(x: 100, y: 100))
            addPath.addArc(
                withCenter: CGPoint(x: 100, y: 100),
                radius: CGFloat(50),
                startAngle: CGFloat(//someangle),
                endAngle: CGFloat(//someangle),
                clockwise: true
            )

            self.path.append(addPath)

            //self.line.last!.strokeColor = etc... (If don't use "override func draw()")
            self.line.last!.fillColor = UIColor.clear.cgColor
            self.line.last!.path = addPath.cgPath

            self.setNeedsDisplay()
    }

    override func draw(_ rect: CGRect) {
        if self.path.count != 0{
            UIColor.orange.setStroke()
            self.path.last!.stroke()
        }
    }
}

Image

调用addPath.move(to: CGPoint(x: 100, y: 100))后,UIBezierPath移动到指定坐标。现在你告诉它从那里 添加一个圆弧 ,中心为 (100, 100)。以(100, 100)为圆心画圆弧,首先需要向圆周移动。但此时它已经开始绘图了!这就是 addArc 的工作原理。 addLine 也是如此。看看 docs:

This method adds the specified arc beginning at the current point.

所以弧总是从当前点开始,即 (100, 100)。

与其告诉它先移动到中心,不如告诉它通过移除 move(to:)` 线来画一条弧线。