我有以下绘制圆形扇形的代码片段:
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°扇区。这是正确的行为,还是我做错了什么?
发布于 2021-02-20 21:13:24
它看起来确实像是个bug。(请参阅https://stackoverflow.com/a/57034585/341994发生完全相同的事情。)在UIKit端,这不是UIBezierPath的行为方式。如果我们说,作必要的修改:
let path = UIBezierPath()
path.addArc(withCenter: center, radius: radius,
startAngle: 0, endAngle: .pi/4, clockwise: true)
path.addLine(to: center)
path.close()
我们会得到
这正是你所期望的。很容易看出如何进行补偿,但似乎您正在补偿的是SwiftUI路径实现中的错误。
https://stackoverflow.com/questions/66296490
复制相似问题