如何在 iOS 中使用 SVGKit 将 SVG 路径组件解析为 UIBezierPath?

2024-01-11

我正在 iOS 中使用 Swift 制作 SVG 图像动画。我已经能够使用 SVGKit 轻松渲染 SVG(https://github.com/SVGKit/SVGKit https://github.com/SVGKit/SVGKit)但要对其进行动画处理,我需要将 SVG 路径元素转换为 UIBezierPath。我可以使用其他库来完成此操作,但如果我可以单独使用 SVGKit 来完成所有这些工作,那就太好了。我还没有找到任何直接的方法来获取路径元素。


我在使用 Swift 和使用 SVGKit 时也遇到了同样的问题。即使遵循这个简单教程 https://medium.com/@kamil.powalowski/paths-animation-of-svg-file-using-svgkit-3d25e7774c89#.4o5b6jtw6并将其转换为 swift,我可以渲染 SVG,但不能对线条图进行动画处理。对我有用的是切换到袖珍SVG https://github.com/pocketsvg/PocketSVG

它们有一个迭代每个图层的函数,这就是我使用它来制作 SVG 文件动画的方法:

  let url = NSBundle.mainBundle().URLForResource("tiger", withExtension: "svg")!
  let paths = SVGBezierPath.pathsFromSVGAtURL(url)

  for path in paths {
    // Create a layer for each path
    let layer = CAShapeLayer()
    layer.path = path.CGPath

    // Default Settings
    var strokeWidth = CGFloat(4.0)
    var strokeColor = UIColor.blackColor().CGColor
    var fillColor = UIColor.whiteColor().CGColor

    // Inspect the SVG Path Attributes
    print("path.svgAttributes = \(path.svgAttributes)")

    if let strokeValue = path.svgAttributes["stroke-width"] {
      if let strokeN = NSNumberFormatter().numberFromString(strokeValue as! String) {
        strokeWidth = CGFloat(strokeN)
      }
    }

    if let strokeValue = path.svgAttributes["stroke"] {
      strokeColor = strokeValue as! CGColor
    }

    if let fillColorVal = path.svgAttributes["fill"] {
      fillColor = fillColorVal as! CGColor
    }

    // Set its display properties
    layer.lineWidth = strokeWidth
    layer.strokeColor = strokeColor
    layer.fillColor = fillColor

    // Add it to the layer hierarchy
    self.view.layer.addSublayer(layer)

    // Simple Animation
    let animation = CABasicAnimation(keyPath:"strokeEnd")
    animation.duration = 4.0
    animation.fromValue = 0.0
    animation.toValue = 1.0
    animation.fillMode = kCAFillModeForwards
    animation.removedOnCompletion = false
    layer.addAnimation(animation, forKey: "strokeEndAnimation")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 中使用 SVGKit 将 SVG 路径组件解析为 UIBezierPath? 的相关文章

随机推荐

  • 升级到 Spring 3.2 后出现 HttpMediaTypeNotAcceptableException

    将 Spring MVC 应用程序升级到 Spring 3 2 后 在访问某些 URL 时出现以下异常 org springframework web HttpMediaTypeNotAcceptableException Could no
  • 暂停 android 下载管理器

    在我的应用程序中 我从服务器下载电影 其中一些非常大 4GB 或更大 我尝试将自己的下载管理器实现为一项服务 但效果并不好 在某些设备上 应用程序会在没有任何通知的情况下自行崩溃 总体而言下载速度似乎太慢 所以 我想使用 Android 的
  • 反序列化对象时出错

    我有一个 JSON 字符串 target FDOL00001 datapoints y 72 564 x 1523858700 target FDOL00001 datapoints y 86 366 x 1523858700 target
  • 在 PHP 中将十六进制颜色转换为 RGB 值

    转换十六进制颜色值的好方法是什么 ffffff转换为单个 RGB 值255 255 255使用 PHP 如果你想将十六进制转换为RGB 你可以使用sscanf https www php net manual en function ssc
  • PHP 服务器端打印

    我过去几个小时一直在谷歌搜索 似乎找不到答案 我确实接近了这个问题 https stackoverflow com questions 1648399 starting serverside print job via php 我的 Win
  • 带单行的 Mercurial 日志

    常规的hg log命令给出每个变更集至少有 4 行的输出 例如 changeset 238 03a214f2a1cf user My Name lt email protected cdn cgi l email protection gt
  • 在联系页面添加地址簿

    我想在我的地址簿中添加contact页面 我想以编程方式执行此操作i e不使用nib files 谁能给我推荐一个不错的教程或示例代码 我已经使用了 iPatel 给出的答案的代码 当我运行时它抛出异常并且应用程序正在终止 感谢致敬 这是编
  • 从 MySQL 中提取所有 JSON 键

    我有一个 JSON 列属性 例如 a 2 b 5 c 3 a 5 d 1 c 7 e 1 f 7 如何从 MySQL 获取所有不同的 顶级 键名 像这样 a b c d e f 谢谢你 测试表 id json col 2 a 2 b 5 3
  • 从毫秒计算周数、天数和小时数

    周围有很多类似的问题 但没有一个解决这个计算 使用 javascript i 很容易找到 ex 的黑白 2 个日期的毫秒数 var mil Math floor new Date 1 1 2012 new Date 1 7 2012 mil
  • OnItemClick 侦听器和单击的视图项的可见性

    我有一个 ListView 其中每个项目都包含一个Textview and ImageView其中imageView is invisible通过单击每个列表视图项目 它将visible我的代码是 Override public void
  • Flask sqlAlchemy 与 Flask_Marshmallow 的验证问题

    使用flask marshmallow进行输入验证 并使用scheme load 我无法捕获模型中 validates装饰器生成的错误 我捕获了资源中的结果和错误 但错误会直接发送给用户 模型 py python from sqlalche
  • 通过上下文菜单运行 cmd 时 PATH 变量不同

    我刚刚花了最后一个小时试图找出为什么我的 PATH 变量没有更新我的 cmd exe 现在我发现它确实更新了 但仅限于某些条件 我通过更新它Win Break gt Change Settings gt Advanced gt Enviro
  • Flink 处理事件太慢

    我使用 Kinesis 数据流作为源 使用 elasticsearch 作为接收器 在 AWS Kinesis Data 分析应用程序中运行 Flink 作业 事件示例 area sessions userId 4450 date 2021
  • 使用 Mockito 调用回调

    我有一些代码 service doAction request Callback
  • Python 中运算符重载的综合指南 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有关于操作员重载的综合指南 最好是在网上 但一本书也可以 的描述操作员模块 http docs p
  • 自动调整ScrollViewInsets 不起作用

    我创建了一个非常简单的演示应用程序来测试其功能automaticallyAdjustsScrollViewInsets 但 tableView 的最后一个单元格被我的选项卡栏覆盖 我的 AppDelegate 代码 UITabBarCont
  • NSDateFormatter 中“YYYY”和“yyyy”之间的区别

    YYYY 和 yyyy 之间的确切区别是什么 我读到这个链接 https developer apple com library mac documentation Cocoa Conceptual DataFormatting Artic
  • 在Android studio中组织资源

    我正在开发一个包含大量 xml 布局文件的项目 我想将它们组织在单独的文件夹中 这好像是资源合并将是正确的解决方案 http tools android com tech docs new build system resource mer
  • Scala 将函数列表应用于对象

    我有很多功能 val f1 x Int gt x 1 val f2 x Int gt x 2 val f3 x Int gt x 3 我有一个值 val data 5 我想将所有函数应用于该值并返回单个值 所以 f3 f2 f1 data
  • 如何在 iOS 中使用 SVGKit 将 SVG 路径组件解析为 UIBezierPath?

    我正在 iOS 中使用 Swift 制作 SVG 图像动画 我已经能够使用 SVGKit 轻松渲染 SVG https github com SVGKit SVGKit https github com SVGKit SVGKit 但要对其