【SwiftUI】
フォアグラウンド・バックグラウンドを判定する方法
アプリの表示・非表示を判定する
投稿日 2023/08/24 更新日 2023/08/24
こんにちは。IT業界歴4年目の「元木皇天」です。
今回はSwiftUIで、「フォアグラウンド・バックグラウンド」を判定する方法について解説いたします。
環境
OS:MacOS Ventura 13.4
Swift:Ver 5.3
Xcode:Ver 14.3.1
参考文献
フォアグラウンド・バックグラウンドを判定する
SwiftUIでフォアグラウンド・バックグラウンドを判定するには、環境値の「ScenePhase」を使用します。
@Environment(\.scenePhase) private var scenePhase
scenePhaseはenum型の値で、アプリの状態によって値が変化します。
enum値 | 状態 |
---|---|
.active | フォアグラウンド |
.inactive | フォアグラウンドとバックグラウンドの中間の状態 |
.background | バックグラウンド |
「.inactive」はiPhoneのホームボタンを2回押した時などに表示される以下の画面の状態のことを表しています。
実際に、「scenePhase」を使用して、フォアグラウンド・バックグラウンド・インアクティブを判定するサンプルコードは以下になります。
import SwiftUI
struct ContentView: View {
@Environment(\.scenePhase) private var scenePhase
@State private var text: String = ""
var body: some View {
Text(self.text)
.onChange(of: scenePhase){ phase in
switch phase{
case .active:
self.text = "フォアグラウンド"
case .inactive:
self.text = "インアクティブ"
case .background:
self.text = "バックグラウンド"
print("バックグラウンド")
@unknown default:
self.text = ""
}
}
}
}
.onChabgeでscenePhaseの値が変わったタイミングで、任意の処理を実行できます。
ちなみに、上記コードを実行した結果が以下になります。
-フォアグラウンド-
-インアクティブ-
-バックグラウンド-
※画面上からは確認できないので、コンソールログから確認しました。
まとめ
SwiftUIでフォアグラウンド、バックグラウンドを判定するには、環境値:ScenePhaseの値を監視して
値が.activeの場合はフォアグラウンド
値が.backgroundの場合はバックグラウンド
と判定できる。