アプリの状態がフォアグラウンドかバックグラウンドか検知したい場面で活躍するのが、「ScenePhase」です。
たとえば、「バックグラウンドに遷移した場合は処理を中断させ、フォアグラウンドに戻ってきたときに処理を再開させる」といった処理を組みたい時に使います。
とても簡単に使うことができるので、ぜひマスターしておきましょう。
ScenePhaseのコード例
まずは細かな説明の前に、全体像を把握するためにコード例を載せておきます。
import SwiftUI
@main
struct ExampleApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { phase in
if phase == .background {
/* バックグラウンドに遷移時の処理 */
}
if phase == .active {
/* フォアグラウンドに遷移時の処理 */
}
if phase == .inactive {
/* フォアグラウンド or バックグラウンドに遷移する直前の処理 */
}
}
}
}
「ScenePhase」を使っている箇所は、5行目と12〜22行目の部分となります。
この例を見ただけでも「ScenePhase」の大体は把握できると思いますが、以降でもう少し詳細に解説します。
ScenePhaseの解説
環境値「scenePhase」の宣言
コード例の5行目は、Environment属性を使ってscenePhase変数を宣言しています。これによりアプリの現在の状態を保持している「scenePhase」の値を読み取れるようにします。
状態の値として、下記の3つの状態のいずれかを保持しています。
- active
フォアグラウンドに遷移した - background
バックグラウンドに遷移した - inactive
フォアグラウンド or バックグラウンドに遷移する直前
フォアグラウンドやバックグラウンドに遷移しきる前に、終えておきたい処理がある場合に使います。
「onChange」で「scenePhase」の値変化を検知
コード例の12〜22行目は、「onChange」を使った値変化の検知を行っています。今回は「scenePhase」の値変化を検知したいため、下記のように使っています。
.onChange(of: scenePhase)
これにより、「scenePhase」の値が変化したときに13行目〜22行目に定義した処理が実行されるようになります。
今回は「scenePhase」の値変化を検知して、そのときの処理を実行するために「onChange」を使いましたが、当然「scenePhase」以外でも使えます。
「onChange」は状態変化に対する処理でよく使うので、よく理解しておくと良いでしょう。
まとめ
「ScenePhase」、「onChange」を使ってアプリのフォアグラウンド・バックグラウンドの状態を検知し、それに対する処理を実装する方法について解説しました。
とても簡単に実装できますが活用する場面は非常に多いので、ぜひマスターしておきましょうね。
コメント