[英]UIView Animation and UIButton stop working b/c Home pressed - Swift 4
我有一个执行“呼吸动画”的playButton
。 当我按下该按钮时,它的效果很好。 如果我按设备的“主页”按钮,然后重新打开应用程序,则会出现问题。 重新打开后, playButton
没有“呼吸动画”,并且不起作用(按下时什么也没有发生)。
@IBOutlet weak var playButton: UIButton!
override func viewWillAppear(_ animated: Bool) {
UIView.animate(withDuration: 1.0,
delay: 0,
options: [.autoreverse, .repeat, .allowUserInteraction],
animations: {
self.playButton.transform = CGAffineTransform(scaleX: 1.175, y: 1.175)
},
completion: nil
)
}
我已经在以前的游戏应用程序中处理过此问题,如果用户按下“主页”按钮或出现中断(来电),我需要保存并暂停游戏。 因此,我很清楚:
func applicationDidBecomeActive() {}
func applicationWillResignActive() {}
func applicationDidEnterBackground() {}
但是,我没有处理gameState,计时器,需要保存数据等问题。我只是希望在按下Home按钮后重新打开应用程序时,我的按钮及其动画可以正常工作。
我也尝试使用override func viewDidLayoutSubviews() {}
代替viewWillAppear
。 但这没有用。
首先,如果在同一个ViewController
(VC)中有多个动画,这些动画在按下playButton
之后发生,那么这可以解释为什么从背景返回时将其禁用的原因。 为什么? 我不知道。 但是我遇到了类似的问题,并通过为最初设置为在按下UIButton
时发生的多个动画创建新的class
和VC来解决了该问题。 在按钮的IBAction
,我只是为新的VC创建了一个序列。
关于动画,您可以采用以下两种方法:1)使用CALayer暂停和恢复动画;或2)只需使用NotificationCenter,甚至无需触摸任何AppDelegate代码。 我更喜欢简单的方法,因为它可以节省时间和精力。 因此,请在将出现按钮动画的VC中尝试以下代码:
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector:#selector(goingToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(openingApp), name: UIApplication.willEnterForegroundNotification, object: nil)
UIView.animate(withDuration: 1.0,
delay: 0,
options: [.autoreverse, .repeat, .allowUserInteraction],
animations: {
self.playButton.transform = CGAffineTransform(scaleX: 1.175, y: 1.175)
},
completion: nil)
}
@objc func goingToBackground(){
playButton.transform = .identity
}
@objc func openingApp(){
self.view.layoutIfNeeded()
UIView.animate(withDuration: 1.0,
delay: 0.3,
options: [.autoreverse, .repeat, .allowUserInteraction],
animations: {
self.playButton.transform = CGAffineTransform(scaleX: 1.175, y: 1.175)}, completion: nil)
self.view.layoutIfNeeded()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.