PocketSVG
一个简单的工具包,用于在iOS和macOS上以高性能方式显示和操作SVG。
本项目的目标不是成为一个完全合规的SVG解析器/渲染器。而是将SVG作为序列化CG/UIPaths的格式,这意味着它只支持可以由CG/UIPaths表示的SVG功能。
文档详尽。
特性
- 支持SVG元素:
path
、line
、polyline
、polygon
、rect
、circle
、ellipse
- 支持SVG命名颜色
- 完全可用的iOS和macOS演示
- 简单直观的API,用于典型的SVG渲染,如
UIImageView
/NSImageView
或CALayer
子类 - 可以访问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)
输出
注意:默认情况下,在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)
输出
贡献
错误报告和功能请求
请使用问题跟踪器报告任何错误或提交功能请求。
开发
欢迎提交PR。