2016-03-08 49 views
4

我需要一个GMSMarker(谷歌地图)的图标更改为SVG图像(这我从网上申请),任何想法一个UIImage如何做到这一点?我见过一些可以做到这一点但不确定如何使用它们的图书馆!我基本上需要将SVG图像转换为UIImage!如何显示SVG图像与斯威夫特

+0

不能完全肯定你正在尝试做的,但它会使用WKWebView和公正加载SVG在一个选择吗?如果没有,也许有一种方法可以使用webview将svg解码为图像,并使用它... –

回答

2

我没有足够的信誉发表评论,所以我不得不把这个答案,很抱歉,如果这听起来更像是一个注释:

不管怎样,你说你需要一个SVG图像转换成UIImage的。我从来没有这样做过,但是我之前已经从NSData创建了一个UIImage。也许有一种方法可以将SVG转换为NSData,然后转换为UIImage(您可能需要将它从SVG转换为jpeg,然后转换为NSData,我不确定,我需要挖掘项目。 )

或者,也许你可以使用UIImage的初始化文件,称为init(contentsOfFile路径:字符串)。此初始化程序接受一个参数,该参数是一个表示图像路径的字符串。

同样,我还没有尝试任何的这个呢。试图成为一些帮助。

0

两个潜在的方法。

首先,最简单的,是要导出的SVG为PNG格式。例如,大多数应用都会允许进行修改 - 在Mac上,您可以使用Sketch。但是它消除了SVG独立于分辨率的优点,因此它不是理想的选择。您可以导出各种分辨率的PNG,并将1x/2x/3x与您的应用程序一起发送。

另一种选择是创建从UIView派生的自定义类,并覆盖drawRect。在那里,使用函数来绘制SVG,你可以通过打开SVG来看看它(它是可读的,就像你知道的那样,就像一个文本文件)。该drawRect会是这个样子:

let bezierPath = UIBezierPath() 
bezierPath.moveToPoint(CGPoint(x: 11.5, y: 17.5)) 
bezierPath.addLineToPoint(CGPoint(x: 28.5, y: 17.5)) 
// etc - you get the idea.. 
bezierPath.closePath() 

现在,当您插入自定义的UIView,它会自动绘制自身。这是PaintCodeApp使用的方法(请参阅www.paintcodeapp.com)。您可以使用应用程序的试用版来生成代码,或购买应用程序。