用户按下主页按钮后,UIButton 变为 Inanimate

UIButton becomes Inanimate after the user presses Home Button

我有一个名为 findButtonUIButton,它有脉动或呼吸动画。在模拟器和设备中测试应用程序时,一切正常,直到我在动画发生时单击主页按钮。如果我按下主页按钮然后重新打开应用程序,动画将不再出现。

我尝试了在此站点上找到的各种答案,none 都奏效了。我试过使用 ExtensionsNotificationCenter,但过去对人们有用的东西对我都没有用。下面是在按下主页按钮之前完美运行的动画代码:

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 与 post-click 动画放在那里。

不幸的是,findButton从后台返回后仍然没有生命。我希望 NoticationCenter 现在可以工作,因为我将 post-click 动画从第一个 VC 中移出。

您可以尝试注册申请确实进入后台

 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

@pooja 的回答一定会让您走上正确的道路。但是如果你使用的是iOS12、Xcode10、Swift4.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)