Enumeration 列挙

ScenePhase

An indication of a scene’s operational state. あるシーンのもつ操作状態を示すもの。

Declaration 宣言

enum ScenePhase

Overview 概要

The system moves your app’s Scene instances through phases that reflect a scene’s operational state. You can trigger actions when the phase changes. Read the current phase by observing the scenePhase value in the Environment:


@Environment(\.scenePhase) private var scenePhase

How you interpret the value depends on where it’s read from. If you read the phase from inside a View instance, you obtain a value that reflects the phase of the scene that contains the view. The following example uses the onChange(of:perform:) method to enable a timer whenever the enclosing scene enters the ScenePhase.active phase and disable the timer when entering any other phase:


struct MyView: View {
    @ObservedObject var model: DataModel
    @Environment(\.scenePhase) private var scenePhase


    var body: some View {
        TimerView()
            .onChange(of: scenePhase) { phase in
                model.isTimerRunning = (phase == .active)
            }
    }
}

If you read the phase from within an App instance, you obtain an aggregate value that reflects the phases of all the scenes in your app. The app reports a value of ScenePhase.active if any scene is active, or a value of ScenePhase.inactive when no scenes are active. This includes multiple scene instances created from a single scene declaration; for example, from a WindowGroup. When an app enters the ScenePhase.background phase, expect the app to terminate soon after. You can use that opportunity to free any resources:


@main
struct MyApp: App {
    @Environment(\.scenePhase) private var scenePhase


    var body: some Scene {
        WindowGroup {
            MyRootView()
        }
        .onChange(of: scenePhase) { phase in
            if phase == .background {
                // Perform cleanup when all scenes within
                // MyApp go to the background.
            }
        }
    }
}

If you read the phase from within a custom Scene instance, the value similarly reflects an aggregation of all the scenes that make up the custom scene:


struct MyScene: Scene {
    @Environment(\.scenePhase) private var scenePhase


    var body: some Scene {
        WindowGroup {
            MyRootView()
        }
        .onChange(of: scenePhase) { phase in
            if phase == .background {
                // Perform cleanup when all scenes within
                // MyScene go to the background.
            }
        }
    }
}

Topics 話題

Getting Scene Phases

Comparing Phases

Relationships 関係

Conforms To 次に準拠

See Also 参照

Life Cycle