【问题标题】:Why does path draw towards the opposite direction?为什么路径会朝着相反的方向绘制?
【发布时间】:2021-02-20 20:58:38
【问题描述】:

我有以下代码 sn-p 绘制一个扇形:

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° 扇形。这是正确的行为,还是我做错了什么?

【问题讨论】:

    标签: swift swiftui core-graphics


    【解决方案1】:

    它看起来确实像一个错误。 (请参阅https://stackoverflow.com/a/57034585/341994 发生完全相同的事情。)这不是 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 实现中的一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2017-03-14
      • 1970-01-01
      相关资源
      最近更新 更多