Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pocketsvg/PocketSVG
Easily convert your SVG files into CGPaths, CAShapeLayers, and UIBezierPaths
https://github.com/pocketsvg/PocketSVG
cocoapods ios macos objective-c svg svg-files swift
Last synced: 3 months ago
JSON representation
Easily convert your SVG files into CGPaths, CAShapeLayers, and UIBezierPaths
- Host: GitHub
- URL: https://github.com/pocketsvg/PocketSVG
- Owner: pocketsvg
- License: mit
- Created: 2012-08-02T11:27:10.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2024-09-13T11:26:05.000Z (5 months ago)
- Last Synced: 2024-10-29T12:39:35.583Z (4 months ago)
- Topics: cocoapods, ios, macos, objective-c, svg, svg-files, swift
- Language: Objective-C++
- Homepage:
- Size: 743 KB
- Stars: 1,664
- Watchers: 38
- Forks: 239
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# PocketSVG
[](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS-green?style=flat-square)
[](https://github.com/pocketsvg/PocketSVG/actions)
[](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)
[](https://cocoapods.org/pods/PocketSVG)
[](https://github.com/Carthage/Carthage)
[](http://cocoadocs.org/docsets/PocketSVG)
[](#)
[](https://github.com/pocketsvg/PocketSVG/blob/master/LICENSE)
[](https://youtu.be/iik25wqIuFo)A simple toolkit for displaying and manipulating SVGs on iOS and macOS in a performant manner.
The goal of this project is not to be a fully compliant SVG parser/renderer. But rather to use SVG as a format for serializing CG/UIPaths, meaning it only supports SVG features that can be represented by CG/UIPaths.
Thoroughly documented.
## Features
* Support for SVG elements: `path`, `line`, `polyline`, `polygon`, `rect`, `circle`, `ellipse`
* Support for SVG named colors.
* Fully working iOS and macOS demos.
* Straightforward API for typical SVG rendering as a `UIImageView`/`NSImageView` or `CALayer` subclass.
* Access every shape within your SVG as a `CGPath` for more fine-grained manipulation.## Installation
### Swift Package Manager
```swift
dependencies: [
.package(url: "https://github.com/pocketsvg/PocketSVG.git", .upToNextMajor(from: "2.6.0"))
]
```### Cocoapods
Add this to your Podfile:
```ruby
pod 'PocketSVG', '~> 2.6'
```Then run `pod install`
### Carthage
Add this to your Cartfile:
```
github "pocketsvg/PocketSVG" >= 2.7.2
```Then run `carthage update --use-xcframeworks`
## Usage
### Render an SVG file using `SVGImageView`
```swift
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)
```**Output**
Note: By default, SVGLayer has `shouldRasterize` set to `YES` when running on iOS. If you need to animate changes to the layer's transform you might want to reset that to `NO`.
### Manually render each path of an SVG file using `CAShapeLayer`
```swift
view.backgroundColor = .whitelet 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)
```**Output**
## Contributing
### Bug Reports & Feature Requests
Please use the [issue tracker](https://github.com/arielelkin/pocketsvg/issues) to report any bugs or file feature requests.
### Developing
PRs are welcome.