CGPath(AddCurveToPoint) - 第一个控制点的x和y与第二个控制点之间的差异

时间:2012-06-21 23:03:41

标签: objective-c quartz-graphics cgpath

我对Xcode很陌生,所以我决定习惯使用Quartz绘图,虽然我慢慢习惯了它,但是我在绘制bezier路径方面遇到了麻烦。 / p>

特别是,从我的Illustrator设计中,我想绘制一个形状(一组扑克牌中的Spade徽标)虽然x和y点都没问题,我想我混淆了哪一点是第一个控制点,第二个控制点。

我总是想象它,如果你想象一张桌子并沿着它的顶部旋转形状的外部(所以形状总是在桌子上与其下方相对),第一个控制点在左边,第二个是在右边。

是什么情况?

提前谢谢,亚当。

Here is a picture describing what I mean

这是我的代码:

CGMutablePathRef spadePath = CGPathCreateMutable();

CGPathMoveToPoint(spadePath, NULL, 17.0f, 0.0f);

CGPathAddCurveToPoint(spadePath, NULL, 17.0f, 7.3f, 17.0f, 7.318f, 34.0f, 25.475f);
CGPathAddCurveToPoint(spadePath, NULL, 34.0f, 14.754f, 34.0f, 36.197f, 20.838f, 35.029f);
CGPathAddCurveToPoint(spadePath, NULL, 24.679f, 38.425f, 20.838f, 41.03f, 17.0f, 39.2f);
CGPathAddCurveToPoint(spadePath, NULL, 2.846f, 39.2f, 31.156f, 39.2f, 13.163f, 35.029f);
CGPathAddCurveToPoint(spadePath, NULL, 13.163f, 41.03f, 9.323f, 38.425f, 0.0f, 25.475f);
CGPathAddCurveToPoint(spadePath, NULL, 0.0f, 36.197f, 0.0f, 14.754f, 17.0f, 0.0f);

CGPathCloseSubpath(spadePath);

2 个答案:

答案 0 :(得分:4)

我刚刚想出了我自己的问题的答案,在绘制曲线时,你告诉它那个部分的基本坐标。

因此,在解析控制点1的x和y坐标时,您将基本控制点的控制点坐标指向起始点,并将最后一点的控制点坐标与最后一个点的位置相对应。

例如,

Sector drawing with control points

答案 1 :(得分:2)

您错误地转录了部分坐标。例如,这是您的第一条曲线:

CGPathAddCurveToPoint(spadePath, NULL, 17.0f, 7.3f, 17.0f, 7.318f, 34.0f, 25.475f);

但是根据你的图表,它应该是这样的:

CGPathAddCurveToPoint(spadePath, NULL, 17.0f, 7.318f, 30.0f, 14.754f, 34.0f, 25.475f);

但是,在Illustrator图中,它看起来像连接到点2的控制点标有错误的X坐标。它们标记为30但应该标记为34.我没有检查所有标签。