lottie 中 AnimationView 的 IBOutlet 不显示动画

IBOutlet of AnimationView in lottie is not showing the animation

我创建了一个 @IBOutlet weak var animationView: AnimationView! 然后在 ViewController 我添加了一个 UIView 将其 class 从 UIView 更改为 AnimationView。连接插座后,我将此代码添加到 class:

viewDidLoad()
let animation = Animation.named("sticky", subdirectory: "Lottie-files")
animationView.animation = animation
animationView.loopMode = .loop
animationView.contentMode = .scaleAspectFill

然后在 viewDidAppear() 我添加了:

animationView.play()

但是当我 运行 时,它什么也没有显示。我也在终端看到这个:

[Storyboard] Unknown class AnimationView in Interface Builder file.

此警告已解决

但是还是没有出现动画。没有警告,没有错误,只是没有显示。

  1. 您应该在 viewDidAppearafter viewDidLoad 开始动画,例如:viewWillAppear

    public override func viewDidLoad() {
        super.viewDidLoad()
    
        addAnimation(to: animationView, name: "sticky")
    }
    
    public override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    
        animationView.play()
    }
    
    private func addAnimation(to view: AnimationView, name: String) {
        let animation = Animation.named(name, subdirectory: "Lottie-files")
        view.animation = animation
        view.loopMode = .loop
        view.contentMode = .scaleAspectFill
    }
    

    奖金

    Ekramul Hoque's Article about View Controller's Lifecycle


  1. 确保这些

    您应该将 Lottie 写入 Interface Builder 右侧栏中视图的 Identity Inspector 部分。


  1. 检查子目录路径。可能是因为 Xcode 无法在 Lottie-files 子目录中找到文件。尝试将其移动到主目录中并尝试。

根据 lottie 文档,您应该调用

play()

viewDidAppear 中的函数。

public override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    animationView.play()
}

请检查以下内容link

https://github.com/airbnb/lottie-ios/blob/master/Example/lottie-swift/ViewController.swift

NOTE : In some case you need to check sub directory problem

您需要添加文件夹引用

不是群组

有关此部分的更多信息,请查看以下内容 link。

http://www.thomashanning.com/xcode-groups-folder-references/

您可以通过编程方式设置

 import Lottie

然后在视图控制器中添加动画视图,在故事板中设置 lottie 动画 -> animationView -> class -> AnimationView 和模块 -> Lottie

 @IBOutlet weak var animationView: AnimationView!

 //Initialise a Lottie view with frame
    let customAnimationView = AnimationView(name: "Your lotti file name")
    customAnimationView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)

    //Do your configurations
    customAnimationView.loopMode = .loop
    customAnimationView.backgroundBehavior = .pauseAndRestore

    //And play
    customAnimationView.play() 
    animationView.addSubview(customAnimationView)