Как показать.svg изображение с помощью swift
У меня есть .файл изображения svg, который я хочу отобразить в своем проекте.
Я попытался использовать UIImageView, который работает для .формат PNG. & jpg форматы изображений, но не для .расширение svg. Есть ли способ, чтобы отобразить .svg изображение с помощью UIWebView или UIImageView ?
8 ответов
попробуйте этот код
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 file быстро и легко.
2) Убедитесь, что у вас есть цель-C для Swift Bridge file bridging-header.h с кодом импорта в нем:
#import <SVGKit/SVGKit.h>
#import <SVGKit/SVGKImage.h>
3) Используйте фреймворк следующим образом, предполагая, что dataFromInternet - это NSData, ранее загруженный из сети:
let anSVGImage: SVGKImage = SVGKImage(data: dataFromInternet)
myIUImageView.image = anSVGImage.UIImage
фреймворк также позволяет инициализировать SVGKImage из других различных источников, например, он может загрузить изображение для вас, когда вы предоставляете его с URL. Но в моем случае это был сбой в случае недостижимого url, поэтому оказалось, что лучше управлять сетью самостоятельно. Подробнее об этом здесь.
в Swift нет встроенной поддержки SVG. Поэтому нам нужно использовать другие библиотеки.
простые библиотеки SVG в swift:
1) SwiftSVG библиотека
это дает вам больше возможностей импортировать как UIView, CAShapeLayer, Path и т. д.
чтобы изменить цвет SVG и импортировать как UIImage, вы можете использовать мои коды расширения для библиотеки, указанной ниже,
нажать здесь знать об использовании SwiftSVG библиотека :
использование SwiftSVG для установки SVG для Image
|или|
2) SVGKit библиотека
2.1) используйте pod для установки:
pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '2.x'
2.2) добавить рамки
Перейти К Разделу "Appsettings"
-> Вкладка "Общие"
- >Прокрутите вниз до связанных фреймворков и библиотек
-> Нажмите на значок "плюс"
-> Выбирать формат SVG.рамки
2.3) добавьте в Objective-C в Swift Bridge file bridging-header.h:
#import <SVGKit/SVGKit.h>
#import <SVGKit/SVGKImage.h>
2.4) создайте папку SvgImg (для лучшей организации) в проекте и добавьте в нее файлы SVG.
Примечание: добавление папки внутри активов не будет работать, и SVGKit ищет файл только в папках проекта
2.5) используйте в своем Swift-коде, как показано ниже:
import SVGKit
и
let namSvgImgVar: SVGKImage = SVGKImage(named: "NamSvgImj")
Примечание: SVGKit автоматически apends extention ".СВГ" в строке
let namSvgImgVyuVar = SVGKImageView(SVGKImage: namSvgImgVar)
let namImjVar: UIImage = namSvgImgVar.UIImage
есть еще много вариантов для вас, чтобы init SVGKImage и SVGKImageView
есть также другие классы, которые вы можете исследовать
SVGRect
SVGCurve
SVGPoint
SVGAngle
SVGColor
SVGLength
and etc ...
версия 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
}
вы можете сохранить изображения в виде строк и использовать 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 в UIView
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
}
}
для рендеринга SVG-файла вы можете использовать попугай. Также Macaw поддерживает преобразования, пользовательские события, анимацию и различные эффекты.
вы можете отобразить SVG-файл с нулевыми строками кода. Для получения дополнительной информации, пожалуйста, проверьте эту статью: Render SVG файл с Ара.
В случае, если вы хотите использовать WKWebView
для загрузки a .svg изображение, которое исходит из URLRequest
, вы можете просто достичь его так:
Swift 4
if let request = URLRequest(url: urlString), let svgString = try? String(contentsOf: request) {
wkWebView.loadHTMLString(svgString, baseURL: request)
}
это намного проще, чем другие способы сделать это, и вы также можете сохранить свой .строки СВГ куда-то загрузить его позже, даже в автономном режиме, если вам нужно.