当我点击不同的标签栏项目时,Lottie 动画停止

Posted

技术标签:

【中文标题】当我点击不同的标签栏项目时,Lottie 动画停止【英文标题】:Lottie animation stopped when i tap on different tab bar item 【发布时间】:2019-10-23 07:18:36 【问题描述】:

我在我的应用程序中使用 Lottie 动画,当我退出应用程序并再次打开它时,我试图让动画在后台运行(不是强制关闭)..

我能够成功地做到这一点,但问题是当我选择不同的标签栏项目并返回具有动画视图的标签栏项目时动画停止。

这是我的代码。

import UIKit
import Lottie
import UserNotifications
import NotificationCenter

class HomeViewController: UIViewController 

    @IBOutlet weak var animationView: UIView!
    var animation : AnimationView?

    override func viewDidLoad() 
        super.viewDidLoad()
        setupAnimation()
        NotificationCenter.default.addObserver(self, selector: #selector(applicationEnterInForground), name: UIApplication.willEnterForegroundNotification, object: nil)
    

    func setupAnimation() 
        animation = AnimationView(name: "cong")
        animation?.frame = self.animationView.bounds
        self.animationView.addSubview(animation!)
        animation?.loopMode = .loop
        animation?.contentMode = .scaleAspectFit
        animation?.play()
    

    @objc func applicationEnterInForground() 
        if animation != nil 
            if !(self.animation?.isAnimationPlaying)! self.animation?.play()
    

【问题讨论】:

【参考方案1】:

斯威夫特 5

有一个可以设置的属性,它将恢复你的 Lottie 动画:

yourAnimationView.backgroundBehavior = .pauseAndRestore

默认情况下,该属性设置为.pause

【讨论】:

这似乎可以解决问题。谢谢 当你使用 Lottie 时,尤其是 TabBar 应该是单色,还是支持多色? @Krekin 对此有任何想法。我目前收到了一个有多种颜色的 Lottie,但标签栏不支持它【参考方案2】:

更好的是,使用viewWillAppear/viewDidAppear 重新启动动画并删除观察willEnterForegroundNotification

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)

    if self.animation?.isAnimationPlaying == false 
       self.animation?.play()
    

【讨论】:

以上是关于当我点击不同的标签栏项目时,Lottie 动画停止的主要内容,如果未能解决你的问题,请参考以下文章

Lottie Animation:停止循环,但等到动画完成

当用户直接点击标签栏项目时,如何禁用滑动动画?

快速更改点击标签栏后刷新控制器冻结

使用标签栏关闭视图控制器后动画不会停止

带有 Lottie 的动态按钮

封装Android带Lottie动画的底部导航栏