SVGView 1.0.6

SVGView 1.0.6

Exyte 维护。



SVGView 1.0.6

     

SVGView

使用 SwiftUI 编写的 SVG 解析器

SPM Compatible Cocoapods Compatible Carthage Compatible License: MIT

概览

此项目旨在将 SVG 的全部功能带到苹果平台上。我们的框架可以解析 SVG 文件并使用 SwiftUI 来表示其内容。它不仅能够渲染 SVG 文件,还可以向其添加交互性,处理用户输入,并使用 SwiftUI 使您的艺术作品动起来。

使用

使用几行代码就能开始使用 SVGView

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

定制

您可以通过这种方式更改节点的一些参数

let circle = SVGCircle(cx: 30, cy: 30, r: 30)
circle.fill = SVGColor.black
circle.stroke = SVGStroke(fill: SVGColor(hex: "ABCDEF"), width: 2)
circle.onTapGesture {
    print("tap")
}

与向量元素交互

您可以使用标准标识符找到SVG文件中的所需部分,并在运行时添加手势和改变其属性

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

动画

您可以使用标准的SwiftUI工具来对图片进行动画处理

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

复杂效果

SVGView使得为您的应用添加自定义效果变得简单。例如,使这个皮卡丘图标跟踪手指动作。

var body: some View {
    let view = SVGView(contentsOf: 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
    })
}

SVG 测试覆盖率

我们的目标是提供对所有SVG标准的100%支持:1.1(第二版)、Tiny 1.2和2.0。然而,此项目才刚刚开始,您可以在此页面查看我们的进展。您还可以通过查看SVGViewTests项目来了解此框架处理每个SVG测试用例的方式。

安装

Swift 包管理器

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

CocoaPods

pod 'SVGView'

Carthage

github "Exyte/SVGView"

系统要求

  • iOS 14+ / watchOS 7+ / macOS 11+
  • Xcode 12+

我们其他的开源 SwiftUI 库

PopupView - Toasts 和弹出框库
Grid - 最强大的网格容器
ScalingHeaderScrollView - 具有粘性标题的滚动视图,在滚动时缩小
AnimatedTabBar - 带有预设动画的标签栏
MediaPicker - 可定制的媒体选择器
Chat - 完全可自定义的消息单元格、输入视图和内置媒体选择器的聊天 UI 框架
ConcentricOnboarding - 动画引导流程
FloatingButton - 浮动按钮菜单
ActivityIndicatorView - 丰富的动画加载指示器
ProgressIndicatorView - 丰富的动画进度指示器
LiquidSwipe - 流体导航动画