2014-03-05 37 views
2

我用CGPath和CAShapeLayer繪製了一個繪圖(繪圖屏幕),現在我的客戶想要輸出圖像可縮放,並且我找到了SVG Kit SVG Kit,但我不知道如何使用這個庫。我在圖書館的例子中沒有找到和示例!有誰知道如何使用這個庫將CGPath轉換爲SVG,或者可以給我一個教程?使用CGPath繪圖到SVG輸出

在此先感謝!

回答

9

你可以用看at this file on GitHub開始。它有一個將CGPathRef轉換爲SVG路徑的d屬性的例程。我寫的。

類方法的簽名是+(的NSString *)svgPathFromCGPath:(CGPathRef)aPath; [更新:添加以下代碼片段]

#import "SVGPathGenerator.h" 

...

CGMutablePathRef pathToBuild = CGPathCreateMutable(); 
CGPathMoveToPoint(pathToBuild, nil, 10, 10); 
CGPathAddQuadCurveToPoint(pathToBuild, nil, 20, 0, 30, 40); 
CGPathAddCurveToPoint(pathToBuild, nil, 20, 40, 40, 30, 100, 90); 
CGPathAddLineToPoint(pathToBuild, nil, 50, 100); 

NSString* aDAttribute = [SVGPathGenerator svgPathFromCGPath:pathToBuild]; 
NSLog(@"%@",aDAttribute); 

輸出: M10.0 10.0Q20.0 0.0 30.0 40.0C20.0 40.0 40.0 30.0 100.0 90.0L50.0 100.0

注意,如果你在石英添加弧線,如SVG弧和弧完全不同的描述的輸出不會有密切的對應關係。

如果你想將它輸出到一個簡單的SVG文件,那麼,你可以這樣做:

CGRect boundingBox = CGPathGetPathBoundingBox(pathToBuild); 

NSString* svgAsString = [NSString stringWithFormat:@" <?xml version=\"1.0\" encoding=\"UTF-8\"?> \ 
         <!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"> \ 
         <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewport-fill=\"none\" viewBox=\"%lf, %lf, %lf, %lf\" version=\"1.1\" height=\"%lf\" width=\"%lf\" > \ 
         <path fill=\"none\" stroke=\"green\" d=\"%@\" /> \ 
         </svg>", 
         boundingBox.origin.x, boundingBox.origin.y, boundingBox.size.width, boundingBox.size.height, boundingBox.size.height, boundingBox.size.width, aDAttribute 
         ]; 

NSData* utf8Data = [svgAsString dataUsingEncoding:NSUTF8StringEncoding]; 
[utf8Data writeToFile:pathToFile atomically:YES]; 

(我還沒有編譯此代碼)。

+0

嗨,我很欣賞你的幫助,如果我不爲問多,你能給我一個例子,如何我可以用svgPathFromCGPath功能?感謝,並有一個愉快的一天 ! –

+0

好的,附有代碼片段。 –

+0

嗨,感謝您的回覆,但我看到了這個功能,我的問題是我做CGPath到SVGPath轉換後製作SVG文件的例程是什麼。我非常感謝你的幫助!祝你今天愉快 ! –