这段代码符合我的期望。它绘制一条弧,然后从该弧的顶部添加一条宽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时得到的结果(我将对笔划进行动画处理,以便您看到发生了什么事情):
但这是我将线移动300pt时得到的(但将第二条弧线与第一条弧线保持50pt的距离):
显然,如果您不仅使线长300pt,而且将第二条圆弧的中心也移动了300pt,那么就和第一个示例一样(除了更远的地方)。
但是,如果我将您的addLine(to:)
替换为move(to:)
,那么您将不会在它们之间找到一行:
FWIW,在所有这些示例中,我都不知道myX
和myY
使用的是什么,因此我在第一个弧的左侧使用了一个点。显然,如果您不希望多余的行,请将myX
和myY
移至第一个弧的开头(或将其完全注释掉)。