用户按下主屏幕按钮

时间:2019-02-22 03:22:24

标签: ios swift uibutton uiviewanimation notificationcenter

我有一个名为UIButton的{​​{1}},它具有脉动或呼吸动画。在模拟器和设备中测试应用程序时,一切正常,直到动画发生时我单击“主页”按钮为止。如果我确实按下了“主页”按钮,然后重新打开应用程序,则动画将不再发生。

我尝试了在此站点上找到的各种答案,但都没有成功。我曾尝试使用findButtonExtensions,但过去对人们来说没有任何作用。下面是在按下“主页”按钮之前可以完美工作的动画代码:

NotificationCenter

我想知道是否可能需要在动画进入背景之前暂停动画?

更新:通过移动在按下后发生的动画,我可以使“ findButton”在按下时起作用。我创建了一个新的VC和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) } ,并在其中放置了class IBAction和单击后动画。

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

2 个答案:

答案 0 :(得分:2)

@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)

答案 1 :(得分:0)

您可以尝试注册进入后台的应用程序

 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