2011-10-07 156 views
2

我想画出一个带圆圈的圆。要做到这一点,我需要顺时针旋转圆圈,逆时针旋转字母。如何颠倒CGPath的点顺序

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

它实际上是非常困难的。由于一个错误,我的视觉效果太多了。

回答

1

iOS 6介绍-bezierPathByReversingPath 它有一些问题,但它似乎是这个问题的答案。

+0

如果你想要iOS 5的支持,仍然不理想。 – darvids0n

+0

的确如此,但我想在接下来的几个月里,对iOS 5的支持将开始快速下降。 – griotspeak

2

大概我能想到的就是在路径上调用CGPathApply并保存有关所有点的信息,然后在相反方向重新绘制路径。记住,当你完成后请致电CGPathCloseSubpath

+0

感谢一些帮助,我可以得到所有的观点......我会继续努力。 – griotspeak

2

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

所以这里是反转CGPath的代码。这适用于打开的路径以及关闭。它处理复杂的路径以及简单的路径。它还处理具有立方贝塞尔元素,二次贝塞尔元素以及线的路径。我无法发布代码,因为它实际上是一些简单的类,所以我不得不对Zip进行编码。

附加的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是不平凡!

+0

你要部署哪个版本的iOS? bezierPathByReversingPath在iOS 7及更高版本中可用。非常感谢分享 – griotspeak

+0

@griotspeak - 我正在创造一些必须适用于iOS和Mac OSX的东西...... Mac OSX CoreGraphics仍然没有“CGPathCreateCopyByReversingPath()”API或类似的东西。你仍然必须手动完成。 – Andy