【Swift/iOS】端末の画面の明るさをコードから変更する方法!
この記事からわかること
- Swift UIのScenePhaseの使い方
- アプリがフォアグラウンドやバックグラウンドであることを検知する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:16.0
- iOS:18.0
- Swift:5.9
- macOS:Sonoma 14.6.1
端末の画面の明るさをコードから変更する方法
Swiftで端末の画面の明るさをコードから変更するにはUIScreen.main.brightness
プロパティに0.0〜1.0
の値を指定します。
// 画面の明るさを一番明るくする
UIScreen.main.brightness = 1.0
// 画面の明るさを一番暗くする
UIScreen.main.brightness = 0.0
現在ユーザーが設定している画面の明るさもUIScreen.main.brightness
プロパティから取得可能です。
ただアプリ内から明るさを変更すると端末自体の設定も変更されるためアプリを停止させてもその明るさが維持されるようなので適切にユーザーの設定値に戻すなどの対応が必要になります。
Android
アプリが非アクティブになった際に明るさを戻す
アプリから明るさを変更することでアプリを停止させてもその明るさが維持されるのはUX的にあまり良くないので、アプリが停止したタイミングで明るさを戻してあげるようにしたいと思います。
アプリがバックグラウンドに移行するタイミングで画面の明るさを元に戻そうと試みましたが、これは期待通りに明るさを戻すことは出来ませんでした。
NotificationCenter.default.publisher(for: UIApplication.didEnterBackgroundNotification)
.sink { _ in
print("アプリがバックグラウンドになった")
UIScreen.main.brightness = defaultBrightness
}
.store(in: &cancellables)
期待通りに動作させるためには、アプリが非アクティブになる瞬間willResignActiveNotification
で変更することで画面の明るさを戻すことができました。
NotificationCenter.default.publisher(for: UIApplication.willResignActiveNotification)
.sink { _ in
print("アプリが非アクティブになった")
UIScreen.main.brightness = defaultBrightness
}
.store(in: &cancellables)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。