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

标签 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(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 的选择器

关于ios - 在没有观察者的情况下检测 iOS 应用程序移至后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56411881/

相关文章:

ios - 将 UITextView 属性字符串保存到 SwiftUI 中的文件

javascript - TransitionEnd 触发太早

ios - iOS 中的相对路径

Swift CN联系人

iphone - iOS NSMutableArray 卡住

ios - XCode 12 和 IOS 14 中 UITableView 的问题

javascript - AmCharts 折线图动画

javascript - 为什么这段 JS 代码不能在 IE 11 中用于 SVG 动画?

ios - 检测 UICollectionView 上的所有触摸

ios - CKModifyRecordsOperation 完成 Swift 2.0