用CGPath绘图到SVG输出

我用CGPath和CAShapeLayer做了一个绘图(绘图屏幕),现在我的客户想要输出图像可缩放,我发现SVG Kit SVG Kit,但我不知道如何使用这个库。 我没有find和例子既不在图书馆的例子! 有谁知道如何使用这个库转换CGPath到SVG或可以给我一个教程?

提前致谢 !

你可以从GitHub上查看这个文件开始 。 它具有将CGPathRef转换为SVGpath的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中的圆弧和Quartz中的圆弧的描述完全不同。

如果你想输出到一个简单的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]; 

(我没有编译这个代码)。