Swift中App进入后台时触发设备方向变更通知的问题求助
解决方案
方法一:在通知处理方法中直接判断App状态
最直接的方式是在handleDeviceRotation方法开头检查App是否处于前台活跃状态,若处于后台则直接跳过后续逻辑:
@objc func handleDeviceRotation() { // 仅当App在前台时才执行后续逻辑 guard UIApplication.shared.applicationState == .active else { return } // 你的方向处理逻辑写在这里 }
方法二:用状态变量控制逻辑开关
添加一个变量标记App是否活跃,通过监听App前后台通知更新这个变量,最后在方向处理方法中判断该变量:
private var isAppActive = true // 在类初始化时同时添加App状态监听 NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(appWillResignActive), name: UIApplication.willResignActiveNotification, object: nil) @objc func appDidBecomeActive() { isAppActive = true } @objc func appWillResignActive() { isAppActive = false } @objc func handleDeviceRotation() { guard isAppActive else { return } // 你的方向处理逻辑写在这里 }
方法三:结合ARSession状态判断(AR应用专属)
如果你的逻辑仅需要在AR会话运行时执行,可以直接检查ARSession的运行状态:
@objc func handleDeviceRotation() { // 假设你持有ARSession实例session guard session.runConfiguration != nil else { return } // 你的方向处理逻辑写在这里 }
内容的提问来源于stack exchange,提问作者Joice George
相关产品推荐
相关产品推荐

