【Swift/iOS】端末の画面の明るさをコードから変更する方法!

【Swift/iOS】端末の画面の明るさをコードから変更する方法!

この記事からわかること

  • Swift UIScenePhase使い方
  • アプリフォアグラウンドバックグラウンドであることを検知する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

端末の画面の明るさをコードから変更する方法

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)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index