我有一个名为UIButton
的findButton
,它有一个脉冲或呼吸动画。在模拟器和设备中测试应用程序时,一切都运行正常,直到我在动画发生时单击主页按钮。如果我按下主页按钮然后重新打开应用程序,则不再出现动画。
我尝试了在这个网站上找到的各种答案,但没有一个有效。我已经尝试过使用Extensions
和NotificationCenter
,但过去认为对人们起作用的任何东西都不适合我。下面是在按下Home按钮之前完美运行的动画代码:
override func viewWillAppear(_ animated: Bool) {
UIView.animate(withDuration: 1.0,
delay: 0,
options: [.autoreverse, .repeat, .allowUserInteraction],
animations: {
self.findButton.transform = CGAffineTransform(scaleX: 1.175, y: 1.175)}, completion: nil)
}
我想知道是否需要在动画进入后台之前暂停动画?
更新:通过移动按下后发生的动画,我可以让'findButton'工作。我创建了一个新的VC和class
,并将findButton
IBAction与后点击动画放在一起。
不幸的是,从背景返回后,findButton
仍然无生气。我希望NoticationCenter
能够工作,因为我将点击后的动画移出了第一个VC。
@ pooja的回答肯定会让你走上正确的道路。但是如果您使用的是iOS 12,Xcode 10,Swift 4.2,则在实施NotificationCenter时会遇到一些错误。试试@ pooja的代码,但进行以下更改:
NotificationCenter.default.addObserver(self, selector:#selector(doSomethingBefore), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(doSomething), name: UIApplication.willEnterForegroundNotification, object: nil)
您可以尝试注册申请确实进入后台
NotificationCenter.default.addObserver(self, selector:#selector(doSomethingBefore), name: NSNotification.Name.UIApplicationDidEnterBackground, object: nil)
注册应用程序将变为活动状态
NotificationCenter.default.addObserver(self, selector:#selector(doSomething), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
视图消失时设置按钮的变换
@objc func doSomethingBefore(){
findButton.transform = .identity
}
应用变为活动状态时启动动画
@objc func doSomething(){
self.view.layoutIfNeeded()
UIView.animate(withDuration: 1.0,
delay: 0.3,
options: [.autoreverse, .repeat, .allowUserInteraction],
animations: {
self.findButton.transform = CGAffineTransform(scaleX: 1.175, y: 1.175)}, completion: nil)
self.view.layoutIfNeeded()
}
你可以看到一个工作样本here