如何在iOS中更改Lottie动画的颜色?

10
我正在使用Lottie框架从JSON文件中加载动画打字指示器。 我想更改指示器颜色的动画。 我不想从JSON文件更改颜色。希望能够以编程方式更改动画视图的颜色。
例如:(。。。。。)->打字指示器(希望更改点的颜色)
  private let animationView = LOTAnimationView(name: 
  Constants.ImageAssets.typingIndicatorIcon, bundle:Bundle(identifier: Constants.GenericKeys.bundleIdentifier)!)

    private func loadTypingIndicator() {
    animationView.loopAnimation = true
    animationView.translatesAutoresizingMaskIntoConstraints = true
    // *** It's not working 
    animationView.setValue(UIColor.green, forKeypath: "boule.Ellipse 1.Fill 1.Color", atFrame: 0)
    animationView.play()
}
5个回答

24

也许这可以帮助您:

let keypath = AnimationKeypath(keys: ["**", "Fill", "**", "Color"])
let colorProvider = ColorValueProvider(UIColor.green.lottieColorValue)
animationView.setValueProvider(colorProvider, keypath: keypath)

14
工作正常,但请使用AnimationView.logHierarchyKeypaths()检查您的动画关键路径,因为并非所有关键路径都是“Fill”。 - Pelanes
4
在我的情况中,我打印了logHierarchyKeypaths()并使用了列表中出现的第一个单词来替换Animationkeypath中的“Fill”。这样做起作用了。 - Roney Sampaio
6
在我的情况下,我不得不用Fill 1替换Fill。值得记录下键并查看哪个键被用于颜色。谢谢大家! - Leonel Menezes Morato Lima
Android有一种更简单的方法来获取颜色属性,难道iOS没有更简单的方法吗?难道不应该检查关键路径并检查哪个覆盖了我们需要的颜色吗? - Joshua Vidamo

6

6
虽然此链接可能回答了问题,但最好在这里包含答案的必要部分,并提供链接作为参考。仅有链接的答案可能会因链接页面的更改而失效。 - Rajan

1
  • 由于动画可能会很复杂并且有多种颜色。可以通过单击“编辑图层颜色”来使用LottieEditor编辑“图层”。然后将.JSON保存到文件中并添加到XCode项目中。
  • 然后在代码中,我所做的就是引用带有所需颜色的.JSON文件,具体取决于UI颜色方案。因此,我会为文件添加其唯一颜色的后缀。例如download_black.json,download_blue.json。

需要付费订阅。 - Vladimir Kuzomenskyi

1
作为一个选项 - 如果需要像模板一样的行为,可以使用 view.mask
lottiViewTintView.backgroundColor = tintColor
lottieView = AnimationView(name: "animation_file")
lottieView.bounds = lottiViewTintView.bounds
lottiViewTintView.mask = lottieView

-3

这个问题是关于如何通过编程自定义颜色,以便可以轻松动态地更改它。 - CristianMoisei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接