如何使用swift显示.svg图像

我有一个.svg图像文件,我想在我的项目中显示。

我尝试使用UIImageView,它适用于.png和.jpg图像格式,但不适用于.svg扩展名。 有什么办法可以使用UIWebView或UIImageView显示.svg图像吗?

试试这个代码

 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 

例如,您可以使用SVGKit 。

1)根据说明进行整合。 拖放.framework文件非常简单。

2)确保你有一个Objective-C的Swift桥文件bridging-header.h和导入代码:

 #import <SVGKit/SVGKit.h> #import <SVGKit/SVGKImage.h> 

3)使用这样的框架,假设dataFromInternet是以前从networking下载的NSData:

 let anSVGImage: SVGKImage = SVGKImage(data: dataFromInternet) myIUImageView.image = anSVGImage.UIImage 

该框架还允许从其他不同的来源初始化SVGKImage,例如,当您提供URL时,它可以为您下载图像。 但在我的情况下,它是崩溃的情况下,无法访问的url,所以它是最好的自己pipe理networking。 更多信息在这里 。

Swift 3.0版本:

 let path = Bundle.main.path(forResource: "svgNameFileHere", ofType: "svg")! if path != "" { let fileURL:URL = URL(fileURLWithPath: path) let req = URLRequest(url: fileURL) self.webView.scalesPageToFit = false self.webView.loadRequest(req) } else { //handle here if path not found } 

Swift中没有内置的SVG支持。 所以我们需要使用其他库。

swift中简单的SVG库是:

1) SwiftSVG库

它给你更多的select导入UIView,CAShapeLayer,path等

要修改您的SVG颜色和导入为UIImage您可以使用我的扩展代码为下面的链接中提到的库,

点击这里了解使用SwiftSVG库:
使用SwiftSVG为图像设置SVG

|和|

2) SVGKit库

2.1)使用pod进行安装:

 pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '2.x' 

2.2)添加框架

转到AppSettings
– >常规选项卡
– >向下滚动到链接的框架和库
– >点击加号图标
– >selectSVG.framework

2.3)将Objective-C添加到Swift桥文件中bridging-header.h:

 #import <SVGKit/SVGKit.h> #import <SVGKit/SVGKImage.h> 

2.4)在Project中创buildSvgImg文件夹(为了更好的组织),并在其中添加SVG文件。

注意:添加内部资产文件夹将不起作用,SVGKit仅在“项目”文件夹中search文件

2.5)在你的Swift代码中使用如下:

 import SVGKit 

 let namSvgImgVar: SVGKImage = SVGKImage(named: "NamSvgImj") 

注意:SVGKit自动将扩展名“.svg”添加到您指定的string中

 let namSvgImgVyuVar = SVGKImageView(SVGKImage: namSvgImgVar) let namImjVar: UIImage = namSvgImgVar.UIImage 

初始化SVGKImage和SVGKImageView有很多选项

还有其他课程可以探索

  SVGRect SVGCurve SVGPoint SVGAngle SVGColor SVGLength and etc ... 

你可以保持你的图像为string,并使用WKWebView来显示它们:

 let webView: WKWebView = { let mySVGImage = "<svg height=\"190\"><polygon points=\"100,10 40,180 190,60 10,60 160,180\" style=\"fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;\"></svg>" let preferences = WKPreferences() preferences.javaScriptEnabled = false let configuration = WKWebViewConfiguration() configuration.preferences = preferences let wv = WKWebView(frame: .zero, configuration: configuration) wv.scrollView.isScrollEnabled = false wv.loadHTMLString(mySVGImage, baseURL: nil) return wv }() 

要呈现SVG文件,您可以使用Macaw 。 金刚鹦鹉还支持转换,用户事件,animation和各种效果。

你可以用零行代码渲染SVG文件。 欲了解更多信息,请查看这篇文章: 用金刚鹦鹉渲染SVG文件 。

这是一个简单的类,可以在UIView显示SVG图像

 import UIKit public class SVGImageView: UIView { private let webView = UIWebView() public init() { super.init(frame: .zero) webView.delegate = self webView.scrollView.isScrollEnabled = false webView.contentMode = .scaleAspectFit webView.backgroundColor = .clear addSubview(webView) webView.snp.makeConstraints { make in make.edges.equalTo(self) } } required public init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } deinit { webView.stopLoading() } public func load(url: String) { webView.stopLoading() if let url = URL(string: fullUrl) { webView.loadRequest(URLRequest(url: url)) } } } extension SVGImageView: UIWebViewDelegate { public func webViewDidFinishLoad(_ webView: UIWebView) { let scaleFactor = webView.bounds.size.width / webView.scrollView.contentSize.width if scaleFactor <= 0 { return } webView.scrollView.minimumZoomScale = scaleFactor webView.scrollView.maximumZoomScale = scaleFactor webView.scrollView.zoomScale = scaleFactor } }