RFSVG 1.0.0

RFSVG 1.0.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布上次发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Dunja Lalic 维护。



RFSVG 1.0.0

  • 作者:
  • Dunja Lalic

RFSVG

RFSVG 是一个用于更容易使用和重复使用 SVG 文件的库。它维护一个光栅化 SVG 图像的缓存,以最小化每次需要显示时重新解析和重新渲染 SVG 文件的需要。

用法

API 通过 UIKit 类扩展如 UIImageViewUIButton 等,通过传递 svg 文件的名称和大小来使用。其余的将自动完成。

示例

UIImageView

let imageView = UIImageView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 100))
imageView.setImageFromSVG("unicorn")

UIButton

let button = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 100))
button.setImageFromSVG("unicorn", for: .normal)

内部实现

RFSVG 使用 PocketSVG 来解析和渲染 SVG。它将 SVG 渲染为 CALayer,然后对它进行“截图”。性能应与 Apple 提供的最新 API 和推荐建议进行比较。由于解析、渲染和截图一个图像成本很高,并且图像通常会被重复使用,因此采用了内存和磁盘缓存的组合以提高效率。

内存缓存

当请求从 SVG 渲染图像后,图像将临时存储在内存中的 NSCache 中。临时意味着如果它已被保存到磁盘,它将从内存缓存中移除。然而,也可能出现用户磁盘空间不足的情况。在这种情况下,它可能保持在内存中,直到应用程序运行结束或收到低内存警告。

磁盘缓存

RFSVGCache 单例每次启动时都会删除并重新创建缓存文件夹。将图像缓存到内存后,一个表示文件异步地写入文件夹。由于写入文件是异步进行的,RFSVGCache 也会监视缓存文件夹的内容以便添加文件。这就是内存中的图像从内存缓存中清除的方式:每次观察到目录更改时,都会与内存缓存进行比较,如果找到相应的文件表示,就会从内存缓存中清除图像。

注意事项

PocketSVG 并不是SVG规范的完整实现,且在撰写本文时,iOS上尚不存在这样的完整库。到目前为止,大多数SVG渲染错误问题都通过优化SVG来解决的,参考优化 SVGs。

要求

  • Xcode 8.2
  • Swift 3
  • iOS 9.0及以上

许可证

RFSVG在MIT许可证下可用。更多信息请参阅LICENSE文件。

本项目包括名为"Invisible Pink Unicorn black"的SVG文件,由用户:Kontos(Image:Invisible Pink Unicorn.svg的派生版)创建,授权基于GFDL(https://gnu.ac.cn/copyleft/fdl.html)或CC-BY-SA-3.0(http://creativecommons.org/licenses/by-sa/3.0/),通过维基媒体共享资源获得