2016-03-08 61 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)。您可以使用應用程序的試用版來生成代碼,或購買應用程序。