回答
好像有一個更聰明的解決方案SVGKit:
SVGKit是可可框架用於渲染SVG文件作爲核心動畫層。所有形狀都由CAShapeLayer類的實例來表示,並且通過設計可以生成動畫。 SVGKit與最新的Mac OS X和iOS SDK兼容。
是的。有可能的。我沒有這樣做,但因爲SVG uses paths itself,似乎將SVG路徑映射到CGPath將是可能的/可管理的。那個時候的問題變成了你的動力?我沒有看到任何已經在粗略的谷歌搜索中做到這一點的Objective-C庫,但它可能在那裏。我確實看到a Java implementation,你可能會移植。
考慮到在網絡上缺乏明顯的解決方案,我想這不是app應用程序開發者非常普遍的需求。可能有更好/更簡單的方法來解決手頭的問題。如果你只想顯示一個SVG圖像,你可以嵌入一個webview並讓WebKit爲你呈現。
我不想只是顯示SVG。在某些視圖中,我需要相當複雜的路徑。因爲我希望用戶能夠改變這條道路,如果他們能夠在他們最喜歡的矢量程序中繪製它們,那將是很好的。 – vikingosegundo 2010-08-23 16:49:44
這很有道理。不幸的是,它看起來好像沒有任何Objective-C實現。我見過一些C++庫,但它們看起來非常龐大,並且很難移植。支持完整的SVG規範可能是可行的,但耗時。祝你好運。 – 2010-08-23 17:51:45
[更新:在我第一次回答這個問題的間隔時間裏,我發佈了一個課程來處理MIT許可證下的這個問題:SVGgh SVGPathGenerator。尋找:
+(CGPathRef) newCGPathFromSVGPath:(NSString*)anSVGPath whileApplyingTransform:(CGAffineTransform)aTransform
]
我期待在今天這個做的,除了絕對和相對弧操作數的所有操作數非常整齊地映射到CGMutablePathRef的路徑創建API。當我遇到這個問題時,我正在使用Google搜索來找到使弧的SVG定義與CGPathAddArcToPoint兼容所需的數學巫術。您只需解析SVG路徑元素的d屬性,您可以通過NSXMLParser對象和您提供的委託來獲取該屬性。
如果您可以使用GPL'd代碼,那麼Webkit源代碼有一個SVGPathParser.cpp文件,它具有一些有用的花絮。 W3C有一些有用的implementation notes和Gabe Lerner在JavaScript中實現它。
我也在爲這個問題苦苦掙扎,尋求解決方案。 SVGKit似乎是我能找到的最接近的解決方案,但仍然沒有完成這項工作。我遇到的問題是,它似乎只支持某些SVG文件,我沒有成功將我的任何文件轉換爲兼容格式。我甚至寫了自己的解析器,但結果也不一致。
我開始深入研究SVG規範,每個向量編輯工具如何生成這些文件似乎存在一些不一致之處。然後,我最終研究了基於SVG的Adobe FXG格式。我立即注意到的一件事是Path數據中的命令都是絕對的而不是相對的。這(恕我直言)遠遠使FXG優於SVG。
我能夠將其轉換爲實際工作完美的CGPath。我目前的需求只需要轉換路徑數據作爲剪輯路徑,但完全可以支持完整的FXG規範。
這裏有一個AIR應用程序,我將它放在一起用於從FXG路徑數據生成核心圖形命令,這證明了它的潛力。 http://iksnae.com/fxgtool/
希望它也能幫助你。
PocketSVG會變成一個SVG文件轉換成UIBezierPath,從中可以得到一個CGPath:
PocketSVG *myBezier = [[PocketSVG alloc] initFromSVGFileNamed:@"BezierCurve1-iPad"];
UIBezierPath *myPath = myBezier.bezier;
//myPath.CGPath <--- your CGPath
- 1. 從drawRect創建cgpath
- 2. 從UIImage創建CGPath
- 3. 從CGPath創建一個NSView
- 4. UIWebview'即時創建SVG'
- 5. 如何在jsp中創建svg文件?
- 6. 從java中的許多小型svg文件創建SVG文件
- 7. nodejs從svg中創建mp3文件
- 8. 從不帶drawRect的浮點創建CGPath
- 9. 有沒有一種工具從SVG文件創建SVG路徑?
- 10. 如何從SVG路徑創建BufferedImage?
- 11. 如何從SKLabelNode獲取CGPath?
- 12. 如何從Raphael SVG創建獨立的SVG?
- 13. 如何從XmlReader創建XML文件?
- 14. 創建SVG文件和相關命令
- 15. 如何即時創建xps文檔?
- 16. 從SVG文件
- 17. 從文本獲取CGPath
- 18. 如何從我創建的文件(.cs文件)創建一個exe文件?
- 19. 創建無盡的cgpath沒有framedrops
- 20. 使用CGPath繪圖到SVG輸出
- 21. 從一個svg文件創建多頁PDF
- 22. Swing&Batik:從SVG文件創建一個ImageIcon?
- 23. 從SVG文件中創建一個非緩衝java.awt.Image中
- 24. 如何從純python創建yaml文件?
- 25. Java:如何從.asc文件創建java.security.Key?
- 26. 如何從文件創建IO對象?
- 27. 如何從文件創建BigQuery連接
- 28. 如何從.csv文件創建表格?
- 29. 如何從Rust創建TOML文件?
- 30. 如何從文件創建Zookeeper節點?
這很好,但它目前不支持浮點。有一個使用NSScanner的拉取請求。這確實在路徑上進行浮點運算。 – slf 2011-09-16 12:56:47