检测没有观察者的iOS应用移至后台

时间:2019-06-02 02:52:36

标签: ios swift animation foregroundnotification

该应用程序具有动画,该动画在该应用程序进入背景或前景时停止,并在该应用程序再次变为活动状态时重新启动。

如何在不使用观察者的情况下做到这一点?我在其他线程中读到,这种方式不是一个好习惯,该应用程序可能会崩溃。

override func viewDidLoad() {
    super.viewDidLoad()

    myView.startAnimations()

    let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.willEnterForegroundNotification, object: nil)
    notificationCenter.addObserver(self, selector: #selector(appBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)

}


override func viewWillAppear(_ animated: Bool) {
    myView.startAnimations()
}
override func viewDidDisappear(_ animated: Bool) {
    myView.stopAnimations()
}

@objc func appMovedToBackground() {
    myView.stopAnimations()
}

@objc func appMovedToForeground() {
    myView.stopAnimations()
}

@objc func appBecomeActive() {
    myView.startAnimations()
}

2 个答案:

答案 0 :(得分:0)

如果您寻求与旧版iOS的稳定性和兼容性,我建议使用KVObserver https://github.com/postmates/PMKVObserver,它有助于维持观察者数量,并有助于在需要释放观察对象的情况下删除观察者。 iOS 10及更低版本。

您的代码非常完美,只需修复UIApplication.willEnterForegroundNotification的选择器

答案 1 :(得分:0)

快速5 +

我没有找到合适的解决方案,我不建议使用它,但是它对我有用。

将此功能放入您的主ViewController

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
 }

它在应用程序进入后台时调用。