PocketSVG 2.7.3

PocketSVG 2.7.3

测试已测试
Lang语言 Objective C++Objective C++
许可证 MIT
Released最后发布2023年7月

Ariel Elkin 维护。



PocketSVG 2.7.3

  • Ponderwell,Fjölnir Ásgeirsson,Ariel Elkin 和贡献者

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 功能。

详尽地文档化。

特性

  • 支持 SVG 元素:pathlinepolylinepolygonrectcircleellipse
  • 支持 SVG 命名颜色。
  • 完整的 iOS 和 macOS 示例。
  • 简单直观的 API 用于典型 SVG 渲染,作为 UIImageView/NSImageViewCALayer 子类的 SVG 渲染。
  • 将 SVG 中的每个形状作为 CGPath 访问,进行更精细的操作。

安装

Swift软件包管理器

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

贡献

错误报告和功能请求

请使用问题跟踪器提交任何错误或提出功能请求。

开发

欢迎提交PR。