2
我用CGPath和CAShapeLayer绘制了一个绘图(绘图屏幕),现在我的客户想要输出图像可缩放,并且我找到了SVG Kit SVG Kit,但我不知道如何使用这个库。我在图书馆的例子中没有找到和示例!有谁知道如何使用这个库将CGPath转换为SVG,或者可以给我一个教程?使用CGPath绘图到SVG输出
在此先感谢!
我用CGPath和CAShapeLayer绘制了一个绘图(绘图屏幕),现在我的客户想要输出图像可缩放,并且我找到了SVG Kit SVG Kit,但我不知道如何使用这个库。我在图书馆的例子中没有找到和示例!有谁知道如何使用这个库将CGPath转换为SVG,或者可以给我一个教程?使用CGPath绘图到SVG输出
在此先感谢!
你可以用看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];
(我还没有编译此代码)。
嗨,我很欣赏你的帮助,如果我不为问多,你能给我一个例子,如何我可以用svgPathFromCGPath功能?感谢,并有一个愉快的一天 ! –
好的,附有代码片段。 –
嗨,感谢您的回复,但我看到了这个功能,我的问题是我做CGPath到SVGPath转换后制作SVG文件的例程是什么。我非常感谢你的帮助!祝你今天愉快 ! –