scenePhase 的作用
>
>
SwiftUI 提供了一个名为
scenePhase
的 环境变量,它在应用程序在前台、后台和非活动状态之间切换时会自动更新。你可以在 App 结构体本身或任何 SwiftUI 视图中观察这些状态的变化。首先,添加一个属性来追踪这个键:
@Environment(\.scenePhase) var scenePhase
然后,你可以将任何你想要的逻辑添加到你的视图中,或者使用
onChange()
来直接观察变化。例如,我们可以编写一个视图来监视
scenePhase
并在 Xcode 的调试控制台中打印一些文本,以便在阶段变化时进行观察:struct ContentView: View { @Environment(\.scenePhase) var scenePhase var body: some View { Text("Test") .onChange(of: scenePhase) { newPhase in if newPhase == .inactive { print("非活动") } else if newPhase == .active { print("活动") } else if newPhase == .background { print("后台") } } } }
正如你所见,有三种状态:
- 活动状态:当你的应用程序在前台且对用户交互时使用,这意味着用户正在使用它。
- 后台状态:当你的应用程序当前不可见时使用,因此你应该减少工作量。
- 非活动状态:当你的应用程序可见但用户无法直接交互时使用。例如,如果在运行应用程序时进入多任务模式,你可以在其他应用程序窗口旁边看到你的应用程序窗口,但并未直接使用它。
通过结合
scenePhase
属性和onChange()
修饰器,你可以响应应用程序状态的变化,并相应地调整其行为。这在管理资源、保存数据或在应用程序转入后台或变得非活动时暂停某些活动方面特别有用。注意,这段代码应放置在 SwiftUI 视图的
body
属性中。你也可以将此逻辑直接应用于你的App
结构体,以观察应用程序层级的场景阶段变化。这种方法为确保应用程序根据其当前的可见性和与用户的互动状态来适当地行事提供了一种简单而有效的方式。