You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:17:03