该应用程序具有动画,该动画在该应用程序进入背景或前景时停止,并在该应用程序再次变为活动状态时重新启动。
如何在不使用观察者的情况下做到这一点?我在其他线程中读到,这种方式不是一个好习惯,该应用程序可能会崩溃。
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()
}
答案 0 :(得分:0)
如果您寻求与旧版iOS的稳定性和兼容性,我建议使用KVObserver https://github.com/postmates/PMKVObserver,它有助于维持观察者数量,并有助于在需要释放观察对象的情况下删除观察者。 iOS 10及更低版本。
您的代码非常完美,只需修复UIApplication.willEnterForegroundNotification的选择器
答案 1 :(得分:0)
快速5 +
我没有找到合适的解决方案,我不建议使用它,但是它对我有用。
将此功能放入您的主ViewController
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
}
它在应用程序进入后台时调用。