应用程序从后台重新出现后动画将不起作用
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:
都调用的通用方法。
我在 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:
都调用的通用方法。