1

该应用程序有一个动画,当应用程序进入后台或前台时停止,并在应用程序再次激活时重新启动。

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

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(appMovedToForeground), 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()
}

(使用“appMovedToForeground”的修复进行编辑)

4

2 回答 2

0

如果您寻求与旧 iOS 版本的稳定性和兼容性,我会推荐 KVObserver https://github.com/postmates/PMKVObserver,它有助于保持观察者数量,有助于在被观察对象将要删除时删除观察者为 iOS 10 及更低版本发布。

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

于 2019-06-02T03:49:44.597 回答
0

斯威夫特 5+

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

将此功能放入您的主 ViewController

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

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

于 2020-04-05T04:05:45.490 回答