为什么路径朝相反的方向绘制?

Why does path draw towards the opposite direction?

我有以下绘制圆形扇形的代码片段:

struct CircularSector: Shape {
    let centralAngle: Angle
    
    func path(in rect: CGRect) -> Path {
        let radius = min(rect.width, rect.height) / 2
        let center = CGPoint(x: rect.midX, y: rect.midY)
        var path = Path()
        path.addArc(center: center, radius: radius, startAngle: .degrees(0), endAngle: centralAngle, clockwise: true)
        path.addLine(to: center)
        path.closeSubpath()
        return path
    }
}

预览时,

struct CircularSector_Previews: PreviewProvider {
    static var previews: some View {
        CircularSector(centralAngle: .degrees(45)).fill(Color.black)
        }
    }
}

它不是顺时针 45° 扇区,而是逆时针绘制 315° 扇区。这是正确的行为,还是我做错了什么?

这看起来确实像是一个错误。 (请参阅 那里发生了完全相同的事情。)这不是 UIBezierPath 在 UIKit 端的行为方式。如果我们说,比照:

    let path = UIBezierPath()
    path.addArc(withCenter: center, radius: radius, 
        startAngle: 0, endAngle: .pi/4, clockwise: true)
    path.addLine(to: center)
    path.close()

我们得到

这正是您所期待的。很容易看出如何补偿,但看起来你正在补偿的是 SwiftUI Path 实现中的错误。