PocketSVG

Platforms Build Status Swift Package Manager CocoaPods Compatible Carthage compatible Code Coverage code size license Swift Forums

一个在 iOS 和 macOS 上以高性能方式显示和操作 SVG 的简单工具包。

这个项目的目标不是成为一个完全兼容的 SVG 解析器/渲染器。而是将 SVG 用作序列化 CG/UIPaths 的格式,这意味着它只支持可以由 CG/UIPaths 表示的 SVG 功能。

文档详尽。

特性

安装

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/pocketsvg/PocketSVG.git", .upToNextMajor(from: "2.6.0"))
]

Cocoapods

将此添加到您的 Podfile

pod 'PocketSVG', '~> 2.6'

然后运行 pod install

Carthage

将此添加到您的 Cartfile

github "pocketsvg/PocketSVG" >= 2.7.2

然后运行 carthage update --use-xcframeworks

用法

使用 SVGImageView 渲染 SVG 文件

let url = Bundle.main.url(forResource: "tiger", withExtension: "svg")!
let svgImageView = SVGImageView.init(contentsOf: url)
svgImageView.frame = view.bounds
svgImageView.contentMode = .scaleAspectFit
view.addSubview(svgImageView)

输出 image

注意:默认情况下,在 iOS 上运行时,SVGLayer 的 shouldRasterize 设置为 YES。如果您需要动画化图层变换的更改,您可能需要将其重置为 NO

使用 CAShapeLayer 手动渲染 SVG 文件的每个路径

view.backgroundColor = .white

let svgURL = Bundle.main.url(forResource: "tiger", withExtension: "svg")!
let paths = SVGBezierPath.pathsFromSVG(at: svgURL)
let tigerLayer = CALayer()
for (index, path) in paths.enumerated() {
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath
    if index%2 == 0 {
        shapeLayer.fillColor = UIColor.black.cgColor
    }
    else if index%3 == 0 {
        shapeLayer.fillColor = UIColor.darkGray.cgColor
    }
    else {
        shapeLayer.fillColor = UIColor.gray.cgColor
    }
    tigerLayer.addSublayer(shapeLayer)
}

var transform = CATransform3DMakeScale(0.4, 0.4, 1.0)
transform = CATransform3DTranslate(transform, 200, 400, 0)
tigerLayer.transform = transform
view.layer.addSublayer(tigerLayer)

输出 image

贡献

错误报告 & 功能请求

请使用 issue 跟踪器 报告任何错误或提交功能请求。

开发

欢迎 PR。