如何反转CGPath的点顺序

时间:2011-10-07 00:33:40

标签: ios core-text cgpath cashapelayer

我想绘制一个圆形字母。要做到这一点,我需要顺时针抚摸圆圈,逆时针抚摸字母。

这一切都很好,但是当我使用Core Text获得字母路径时,我无法弄清楚如何基本上颠倒路径。不是镜子或旋转或任何东西......这很简单。我希望点击顺序为逆时针。

实际上它非常困难。我有太多的视觉'一个接一个'的错误。

3 个答案:

答案 0 :(得分:2)

我能想到的只是在路径上调用CGPathApply并保存有关所有点的信息,然后以相反的方向重绘路径。完成后请务必致电CGPathCloseSubpath

答案 1 :(得分:2)

我知道这个问题和泥土一样古老,但是,我最近需要扭转一个CGPath。绝对没有关于如何做到这一点的例子,我需要这个在Mac和iOS上工作,所以使用-bezierPathByReversingPath是不可能的。

所以这是反转CGPath的代码。这适用于开放路径以及关闭。它处理复杂的路径以及简单的路径。它还处理具有Cubic贝塞尔元素,二次贝塞尔元素以及线条的路径。我无法发布代码,因为它实际上是几个简单的类,所以我不得不拉链。

附加的Zip文件中有两个C ++类。一个是CCGPathReverse类,另一个是类CCGPathIterator类,与GDI + GraphicsPathIterator非常相似(由CCGPathReverse类使用。)

Here is a link to the classes

要使用它,只需添加CGPathReverse.h标题并将其命名为:

CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddRect(myPath, NULL, CGRectMake(0,0,200,200));
CCGPathReverse r(myPath);
CGPathRelease(myPath);
myPath = r.GetReversedPathMutableCopy();
//
// myPath is now a counter-clockwise rectangle, do what you want with it...
//
CGPathRelease(myPath);

我希望这可以帮助那些人,因为扭转CGPath并不是一件容易的事!

答案 2 :(得分:1)

iOS 6推出-bezierPathByReversingPath 它起初有一些问题,但似乎是这个问题的答案。