首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用CGPath绘制SVG输出

用CGPath绘制SVG输出
EN

Stack Overflow用户
提问于 2014-03-05 15:58:06
回答 1查看 3.5K关注 0票数 5

我用CGPath和CAShapeLayer绘制了一个画图(绘图屏幕),现在我的客户希望输出映像可以伸缩,我找到了SVG SVG工具包,但是我不知道如何使用这个库。我在图书馆的例子中也没有找到和举例!有没有人知道如何使用这个库将CGPath转换成SVG,或者给我提供一个教程?

提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-06 02:46:10

你可以从看在GitHub上的这个文件开始。它有一个例程将CGPathRef转换为SVG路径的d属性。是我写的。

类方法的签名是+(NSString*) svgPathFromCGPath:(CGPathRef)aPath;更新:下面添加的代码片段

代码语言:javascript
运行
复制
#import "SVGPathGenerator.h"

..。

代码语言:javascript
运行
复制
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文件中,那么您可以这样做:

代码语言:javascript
运行
复制
 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];

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

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22202741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档