Open2
001. Swift 非アクティブになった時にUIを隠す

Model
import SwiftUI
@MainActor
class AppStateObserver: ObservableObject {
@Published var shouldHideContent = false
init() {
// アプリが非アクティブになる直前(Appスイッチャーなど)
NotificationCenter.default.addObserver(forName: UIScene.willDeactivateNotification, object: nil, queue: .main) { _ in
self.shouldHideContent = true
}
// アプリがアクティブ状態に戻ったとき
NotificationCenter.default.addObserver(forName: UIScene.didActivateNotification, object: nil, queue: .main) { _ in
self.shouldHideContent = false
}
}
}
import SwiftUI
struct ContentView: View {
@StateObject private var appState = AppStateObserver()
var body: some View {
ZStack {
// メインのUI
VStack {
Text("Hello World")
}
// 非アクティブ時に画面を覆う黒いビュー
if appState.shouldHideContent {
Color.black
.ignoresSafeArea()
}
}
}
}

init内に、通知を送ったり受け取ったりする司令塔的な存在NotificationCenterのdefaultのaddObserverでリスナーを登録する処理をかく
forName:
は「どの通知か」を「UIScene.hogehoge」で指定する
object: nil,
queue: .main
通知名 | タイミング |
---|---|
willDeactivateNotification |
アプリが バックグラウンドに行く直前 |
didEnterBackgroundNotification |
完全にバックグラウンドになったとき |
willEnterForegroundNotification |
バックから戻ってくる直前 |
didActivateNotification |
フォアグラウンド(操作可能)になったとき |