应用程序从后台重新显示后,动画将无法运行

Jac*_*ean 0 ios swift

我在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()
            })
    })
}
Run Code Online (Sandbox Code Playgroud)

以下是viewWillAppear中所有内容的外观

override func viewWillAppear(animated: Bool) {


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

}
Run Code Online (Sandbox Code Playgroud)

在取消隐藏应用程序后,任何人都知道为什么它没有重新启动?

ser*_*gio 5

这是它的工作原理:viewWillAppear:恢复应用程序时不会调用它.

您应该采取的措施是将控制器注册到通知的默认通知中心UIApplicationDidBecomeActiveNotification.在处理程序方法中,您可以运行动画.

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

func cameBackFromSleep(sender : AnyObject) {

   [self viewWillAppear:true];      
}
Run Code Online (Sandbox Code Playgroud)

不要忘记删除deinit方法中的观察者.

顺便说viewWillAppear一下,像我一样打电话只是一个捷径.您最好定义一个既调用viewWillAppear:cameBackFromSleep:调用的常用方法.