应用程序从后台重新出现后动画将不起作用

Animation will not work after app reappears from background

我在 viewWillAppear 中调用了一些动画。动画只会在应用程序首次启动时触发。当我隐藏(而不是关闭应用程序)应用程序并重新打开它时,所有动画看起来都已经完成了它们的动作。当我在 viewDidLoad 中调用动画时也会发生这种情况。我希望每次打开应用程序时动画重新开始,即使我没有关闭它也是如此。

附上我制作的动画示例代码。

func animateFlowerOne(){


    let options = UIViewAnimationOptions.CurveEaseInOut

    //Flower 1
    let flowers = UIImageView()
    flowers.image = UIImage(named: "flower-face")
    flowers.frame = CGRect(x: 100, y: 380, width: 0, height: 0)
    self.view.addSubview(flowers)


    UIView.animateWithDuration(10.0, delay: 2.0, options: options, animations: {
        flowers.frame = CGRect(x: 100, y: 380, width: 15, height: 15)
        }, completion: { animationFinished in
            UIView.animateWithDuration(10.0, delay: 2.0, options: options, animations: {
                flowers.frame = CGRect(x: 100, y: 380, width: 0, height: 0)

                }, completion: { animationFinished in
                    flowers.removeFromSuperview()
                    self.animateFlowerOne()
            })
    })
}

这是 viewWillAppear 中所有内容的样子

override func viewWillAppear(animated: Bool) {


    audioPlayers()
    movingClouds()
    animateFlowers()
    animateFlowerOne()
    flyingPlane()
    balloon()
    hotAirBalloon()

}

有人知道为什么我取消隐藏应用程序后它没有重新启动吗?

它是这样工作的:viewWillAppear: 在您恢复应用程序时不会被调用。

解决此问题的方法是在 UIApplicationDidBecomeActiveNotification 通知的默认通知中心注册您的控制器。在处理程序方法中,您可以 运行 动画。

NSNotificationCenter.defaultCenter().addObserver(
  self,
  selector: "cameBackFromSleep:",
  name: UIApplicationDidBecomeActiveNotification,
  object: nil
)

func cameBackFromSleep(sender : AnyObject) {

   [self viewWillAppear:true];      
}

不要忘记在 deinit 方法中移除观察者。

顺便说一句,像我一样调用viewWillAppear只是一种捷径。您最好定义一个 viewWillAppear:cameBackFromSleep: 都调用的通用方法。