检测在没有观察者的情况下移动到后台的 iOS 应用程序



应用有一个动画,当应用进入后台或前台时停止,并在应用再次处于活动状态时重新启动。

如何在不使用观察器的情况下执行此操作?我在其他线程中读到这种方式不是一种好的做法,应用程序可能会崩溃。

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"的修复程序进行编辑(

如果您寻求与旧iOS版本的稳定性和兼容性,我建议您使用KVObserver https://github.com/postmates/PMKVObserver,它有助于维护观察者计数,有助于在iOS 10及更低版本发布观察到的对象时删除观察者的要求。

你的代码是完全没问题的,只需修复UIApplication的选择器.willEnterForegroundNotification

Swift 5+

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

将此功能放入主视图控制器

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

当应用程序进入后台时,它会调用。

相关内容

  • 没有找到相关文章

最新更新