Как отобразить изображение .svg с помощью swift
У меня есть файл изображения .svg, который я хочу отобразить в своем проекте.
Я попытался использовать UIImageView, который работает для форматов изображений .png и .jpg, но не для расширения .svg. Есть ли способ показать изображение .svg с помощью UIWebView или UIImageView?
Ответы
Ответ 1
Попробуйте этот код
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
Ответ 2
Вы можете использовать SVGKit, например.
1) Включите его в соответствии с инструкциями. Перетащите и удалите файл .framework быстро и легко.
2) Убедитесь, что у вас есть Objective-C для файла моста моста Swift-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-адреса, поэтому оказалось, что лучше управлять сетью самостоятельно. Подробнее об этом здесь.
Ответ 3
версия 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
}
Ответ 4
В Swift нет встроенной поддержки SVG.
Поэтому нам нужно использовать другие библиотеки.
Простые библиотеки SVG в swift:
1) SwiftSVG Библиотека
Это дает вам больше возможностей для импорта в виде 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
- > Вкладка "Общие"
- > Прокрутить вниз до Связанные рамки и библиотеки
- > Нажмите значок плюс
- > Выберите SVG.framework
2.3) Добавьте в Objective-C в Swift файл моста-bridge.h:
#import <SVGKit/SVGKit.h>
#import <SVGKit/SVGKImage.h>
2.4) Создайте папку SvgImg (для лучшей организации) в Project и добавьте в нее SVG файлы.
Примечание. Добавление внутренних атрибутов Папка не будет работать, и SVGKit ищет файл только в папках проекта
2.5) Используйте в своем Swift-коде, как показано ниже:
import SVGKit
и
let namSvgImgVar: SVGKImage = SVGKImage(named: "NamSvgImj")
Примечание. SVGKit автоматически объявляет расширение ".svg" для указанной вами строки.
let namSvgImgVyuVar = SVGKImageView(SVGKImage: namSvgImgVar)
let namImjVar: UIImage = namSvgImgVar.UIImage
Есть еще много вариантов для инициализации SVGKImage и SVGKImageView
Есть и другие классы, которые вы можете изучить
SVGRect
SVGCurve
SVGPoint
SVGAngle
SVGColor
SVGLength
and etc ...
Ответ 5
Вы можете сохранить свои изображения в виде строк и использовать 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
}()
Ответ 6
Для рендеринга SVG файла вы можете использовать Macaw. Также Macaw поддерживает преобразования, пользовательские события, анимацию и различные эффекты.
Вы можете отображать SVG файл с нулевыми строками кода. Для получения дополнительной информации ознакомьтесь с этой статьей: Render SVG файл с Macaw.
Ответ 7
Здесь простой класс, который может отображать 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
}
}