背景
UIScreen.main
がiOS17以降においてdeprecatedとなっていますが、UIScreen.main.brightness
を用いない画面輝度の設定についての情報があまりなかったのでメモとして残しておきます。
結論
windowScene.screen.brightness
を使おう
サンプルコードと補足
画面輝度を調節するだけなのであまり意味はないですが、windowScene
の取得を
guard let windowScene = UIApplication.shared..connectedScenes.first as? UIWindowScene
の形を避け、
view.window?.windowScene
の形をとっています。
(前者の実装だとiPadのマルチウィンドウ等、複数wIndowが存在する際に意図していないwindowを取得する可能性があるため)
SampleViewController.swift
import UIKit
final class SampleViewController: UIViewController {
private var windowSchene: UIWindowScene?
private var defaultBrightness: CGFloat?
// viewWillAppearまでviewがnilなので、このタイミングで実行
override func viewIsAppearing(_ animated: Bool) {
super.viewIsAppearing(animated)
windowScene = view.window?.windowScene
defaultBrightness = windowScene?.screen.brightness
}
}
private extension SampleViewController {
func changeBrightness(to value: CGFloat) {
guard let value else { return }
windowScene?.screen.brightness = value
}
}