2011-10-07 110 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