为什么路径朝相反的方向绘制?
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 实现中的错误。
我有以下绘制圆形扇形的代码片段:
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° 扇区。这是正确的行为,还是我做错了什么?
这看起来确实像是一个错误。 (请参阅
let path = UIBezierPath()
path.addArc(withCenter: center, radius: radius,
startAngle: 0, endAngle: .pi/4, clockwise: true)
path.addLine(to: center)
path.close()
我们得到
这正是您所期待的。很容易看出如何补偿,但看起来你正在补偿的是 SwiftUI Path 实现中的错误。