How to display .svg image using swift
I have a .svg image file I want to display in my project.
I tried using UIImageView, which works for the .png & .jpg image formats, but not for the .svg extension. Is there any way to display a .svg image using UIWebView or UIImageView ?
There is no Inbuilt support for SVG in Swift. So we need to use other libraries.
The simple SVG libraries in swift are :
1) SwiftSVG Library
It gives you more option to Import as UIView, CAShapeLayer, Path, etc
To modify your SVG Color and Import as UIImage you can use my extension codes for the library mentioned in below link,
Click here to know on using SwiftSVG library :
Using SwiftSVG to set SVG for Image
|OR|
2) SVGKit Library
2.1) Use pod to install :
pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '2.x'
2.2) Add framework
Goto AppSettings
-> General Tab
-> Scroll down to Linked Frameworks and Libraries
-> Click on plus icon
-> Select SVG.framework
2.3) Add in Objective-C to Swift bridge file bridging-header.h :
#import <SVGKit/SVGKit.h>
#import <SVGKit/SVGKImage.h>
2.4) Create SvgImg Folder (for better organization) in Project and add SVG files inside it.
Note : Adding Inside Assets Folder won't work and SVGKit searches for file only in Project folders
2.5) Use in your Swift Code as below :
import SVGKit
and
let namSvgImgVar: SVGKImage = SVGKImage(named: "NamSvgImj")
Note : SVGKit Automatically apends extention ".svg" to the string you specify
let namSvgImgVyuVar = SVGKImageView(SVGKImage: namSvgImgVar)
let namImjVar: UIImage = namSvgImgVar.UIImage
There are many more options for you to init SVGKImage and SVGKImageView
There are also other classes u can explore
SVGRect
SVGCurve
SVGPoint
SVGAngle
SVGColor
SVGLength
and etc ...
Try this code
var path: String = NSBundle.mainBundle().pathForResource("nameOfFile", ofType: "svg")!
var url: NSURL = NSURL.fileURLWithPath(path) //Creating a URL which points towards our path
//Creating a page request which will load our URL (Which points to our path)
var request: NSURLRequest = NSURLRequest(URL: url)
webView.loadRequest(request) //Telling our webView to load our above request
You can use SVGKit for example.
1) Integrate it according to instructions. Drag&dropping the .framework file is fast and easy.
2) Make sure you have an Objective-C to Swift bridge file bridging-header.h with import code in it:
#import <SVGKit/SVGKit.h>
#import <SVGKit/SVGKImage.h>
3) Use the framework like this, assuming that dataFromInternet is NSData, previously downloaded from network:
let anSVGImage: SVGKImage = SVGKImage(data: dataFromInternet)
myIUImageView.image = anSVGImage.UIImage
The framework also allows to init an SVGKImage from other different sources, for example it can download image for you when you provide it with URL. But in my case it was crashing in case of unreachable url, so it turned out to be better to manage networking by myself. More info on it here.