我正在尝试将矢量绘图程序中的路径导入到ios环境中。我想让他们进入CGpaths或UIbezierpaths。我最感兴趣的是从adobe illustrator导入路径。最好的方法似乎保存为svg然后导入。
我找到了一些资源来解析导出的描述路径的SVG文件。但是,我发现的一切只涉及绝对路径而不是相对路径。下面的路径有大写字母C和小写字母C.我知道如何解析大写C(绝对路径),但我不知道如何解析小写c(相对路径)
我正在寻找帮助,编写一个解析器,用于将svg文件导入ios / cocoa。我认为通过在互联网上搜索几周来判断这一点是非常必要的。
这里是我要导入iphone应用程序的路径示例。我不想导入图像,我想要路径本身。所以,我可以操纵它。任何帮助将不胜感激。
x="0px" y="0px" width="320px" height="436px" viewBox="-1.4 -0.5 320 436"
d="M294.1,116C290.6,1.4,170.9,0.4,159.6,0.5
C148.3,0.4,28.7,1.4,25.2,116c-3.7,120.3-49.6,141.4-5.9,233.9c41.3,87.4,130.7,87,140.4,86.7c9.7,0.3,99.1,0.8,140.4-86.7
C343.7,257.4,297.8,236.3,294.1,116z
如果这是绝对的路径,我现在就能解决这个问题。它是相对的(即低位(c)路径)让我感到困惑。
答案 0 :(得分:12)
好的伙计们,如果你愿意付钱的话。此工具将解决您的所有问题。您可以导入svg或psd并为您生成代码。我用过它真是太神奇了!
答案 1 :(得分:4)
ObjectiveC中有一个开源的SVG库,专门用于iOS(和OS X,虽然OS X版本有点落后):
https://github.com/SVGKit/SVGKit/
(自今年年初以来,我一直在iOS项目中使用它,效果很好)
2018更新:现在支持OSX,SVGKit可以快速准确地呈现大多数SVG。在缺点方面,并不支持所有高级文本功能(例如,对渐变填充是肯定的,但对于复杂的文本布局则不支持。)
截至2012年初,它并非100%实施SVG规范,但有很多人致力于实现这一目标。
答案 2 :(得分:2)
如果您愿意从JS到ObjC进行翻译,那么您可能会觉得这个项目很有帮助:
https://github.com/thelonious/svg-2d
特别是path.js文件,它包含一个parseData方法,负责处理相对和绝对路径命令。
https://github.com/thelonious/svg-2d/blob/master/shapes/path/Path.js
我应该提到我多年前编写过这段代码,但是我已将它翻译成Java和C#并且已经用于专业产品(不幸的是无法共享该代码)并且它似乎在这些环境中也能很好地工作
HTH 凯文
答案 3 :(得分:1)
Mac App Store上的Sketch 3擅长编辑(可能比PaintCode更好),然后作为SVG导出到PaintCode。
从PaintCode返回Sketch另存为PDF并导入确定
https://itunes.apple.com/gb/app/sketch-3/id852320343?mt=12
确保两者中的画布大小设置为相同,并且在视图边界中,您需要缩放上下文。
答案 4 :(得分:0)
SVGgh包含一个类SVGPathGenerator,它将SVG路径转换为CGPathRef:
+(CGPathRef) newCGPathFromSVGPath:(NSString*)anSVGPath whileApplyingTransform:(CGAffineTransform)aTransform;
您可以使用它来完全按照您的要求进行操作。
[Swift 3 Update]如果你想要一个纯粹的Swift解决方案。我的(进行中)Scalar2D库在CGPath上有一个扩展,它从SVG路径创建一个CGPath。
答案 5 :(得分:0)
将NSG添加到NSView的Oneliner:
addSubView(SVGParser.svg(FileParser.xml(~/Desktop/test.svg)))
SVGLib for swift:https://github.com/eonist/swift-utils
答案 6 :(得分:0)
此解决方案是将SVG路径字符串直接转换为UIBezierPath。它对我的应用程序非常有用,我必须把美国画成UIView。