SVGView

Описание

SVGView - это бесплатная библиотека с открытым исходным кодом, цель которой - открыть силу SVG формата для Apple-платформ. Эта библиотека позволяет загружать SVG-файлы и представлять их содержимое в виде SwiftUI. Кроме того, можно не только отображать готовые файлы, но и обрабатывать пользовательские запросы, взаимодействовать с элементами SVG, менять и анимировать их.

Установка

Библиотеку SVGView можно добавить в проект через любой популярный менеджер библиотек:

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/exyte/SVGView.git")
]

CocoaPods

pod 'SVGView'
        

Carthage

github "Exyte/SVGView"
        

Использование

Начать работу с SVGView можно с нескольких строк кода:

struct ContentView: View {
    var body: some View {
        SVGView(fileURL: Bundle.main.url(forResource: "example", withExtension: "svg")!)
    }
}

Взаимодействие с векторными элементами

Вы можете найти нужную часть SVG-файла использую стандартные идентификаторы для добавления жестов и изменения параметров прямо во время исполнения:

struct ContentView: View {
    var body: some View {
        let view = SVGView(fileURL: Bundle.main.url(forResource: "example", withExtension: "svg")!)
        if let part = view.getNode(byId: "part") {
            part.onTapGesture {
                part.opacity = 0.2
            }
        }
        return view
    }
}

Анимация

Используя стандартные инструменты SwiftUI можно анимировать загруженное SVG-изображение:

if let part = view.getNode(byId: "part") {
    part.onTapGesture {
        withAnimation {
            part.opacity = 0.2
        }
    }
}

Сложные эффекты

SVGView позволяет легко добавлять сложные эффекты в ваше приложение. Например, давайте заставим этого Пикачу следить за движением курсора:

var body: some View {
    let view = SVGView(fileURL: Bundle.main.url(forResource: "pikachu", withExtension: "svg")!)
    let delta = CGAffineTransform(translationX: getEyeX(), y: 0)
    view.getNode(byId: "eye1")?.transform = delta
    view.getNode(byId: "eye2")?.transform = delta

    return view.gesture(DragGesture().onChanged { g in
        self.x = g.location.x
    })
}

Покрытие тестами

Наша задача сделать 100% поддержку всех SVG стандартов: 1.1 (Second Edition), Tiny 1.2 и 2.0. Однако, сейчас проект находится на раннем этапе, но вы можете наблюдать за нашим прогрессом на этой странице. Кроме того, вы можете самостоятельно запустить проект SVGViewTests, чтобы посмотреть отображение каждой конкретной SVG из общего пула тестов.

Требования

Стоимость

SVGview является библиотекой, доступной всем пользователям интернета. Пользование и распространение продукта осуществляется бесплатно.

Приложение

Инструкция по установке и эксплуатации

Описание функциональных характеристик