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 渲染。 - 将 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。