这段代码符合我的期望。它绘制一条弧,然后从该弧的顶部添加一条宽50点的线:

path.move(to: .init(x: myX, y: myY))

path.addArc(withCenter: CGPoint(x: centerX, y: centerY), radius: radius1, startAngle: .pi, endAngle: (3 * .pi)/2, clockwise: true)

let currentPoint = path.currentPoint
path.addLine(to: CGPoint(x: currentPoint.x + 50, y: currentPoint.y))

此代码忽略addLine来添加50点宽的线,而只是在第一条弧的顶部开始第二条弧。
path.move(to: .init(x: myX, y: myY))

path.addArc(withCenter: CGPoint(x: centerX, y: centerY), radius: radius1, startAngle: .pi, endAngle: (3 * .pi)/2, clockwise: true)

let currentPoint = path.currentPoint
path.addLine(to: CGPoint(x: currentPoint.x + 50, y: currentPoint.y))

path.addArc(withCenter: CGPoint(x: centerX + 50, y: centerY), radius: radius1, startAngle: (3 * .pi)/2, endAngle: .pi, clockwise: false)

使用第二部分代码,如果我注释掉addLine代码,我将获得完全相同的输出。如果我将addLine代码更改为增加300个像素点而不是50个像素点,则会得到完全相同的输出。addLine代码被忽略,并且得到两个弧,在第一个端点和第二个端点之间没有直线。

有什么建议么?非常感谢!

最佳答案

你说:

使用第二部分代码,如果我注释掉addLine代码,我将获得完全相同的输出。

是的,将弧线添加到现有路径时,它将自动从currentPoint到第二条弧线的起点绘制一条线。如果您不希望它在两者之间添加线,那么如果您不希望在两者之间插入线,则需要在路径中输入一个move(to:)到第二条弧的起点。或创建两条路径,每条弧线一条,然后分别对其进行描边。

如果我将addLine代码更改为增加300个像素而不是50个像素,则会得到完全相同的输出。

那不太有意义,我无法重现这种行为。例如,这是我将第二条弧线移动50pt时得到的结果(我将对笔划进行动画处理,以便您看到发生了什么事情):

ios - Swift:创建路径时在两个addArc调用之间忽略了addLine-LMLPHP

但这是我将线移动300pt时得到的(但将第二条弧线与第一条弧线保持50pt的距离):

ios - Swift:创建路径时在两个addArc调用之间忽略了addLine-LMLPHP

显然,如果您不仅使线长300pt,而且将第二条圆弧的中心也移动了300pt,那么就和第一个示例一样(除了更远的地方)。

但是,如果我将您的addLine(to:)替换为move(to:),那么您将不会在它们之间找到一行:

ios - Swift:创建路径时在两个addArc调用之间忽略了addLine-LMLPHP

FWIW,在所有这些示例中,我都不知道myXmyY使用的是什么,因此我在第一个弧的左侧使用了一个点。显然,如果您不希望多余的行,请将myXmyY移至第一个弧的开头(或将其完全注释掉)。

09-08 04:50