通知センターを開いた際の輝度調整がうまくいかない
通知センターを開いた際の輝度調整がうまくいかない
画面を開いた時に輝度を最大に、画面を閉じた際に元の輝度にする処理の実装を行なっています。
加えて、通知センター・コントロールセンターを開いた時にも元の輝度に戻し、それらのセンターを閉じてアプリ画面が表示された時はまた輝度を最大にする仕様にしたく思っています。
そのためにNotificationCenterのwillResignActiveNotificationとdidBecomeActiveNotificationを利用しているのですが、
現状通知センターを開いた時、一旦画面が元の明るさ(暗い)に戻った後、また明るくなってしまい上手くいきません。
何か解決方法に心当たりがある方はいらっしゃいますでしょうか。
※少なくともPayPayアプリのバーコード画面のように、通知センターを開いて暗くなった後に一瞬明るくなるとしても、その後すぐに暗くし直せるようにはしたいです。
(もちろん理想は一度暗くなったら通知センターを閉じるまで明るくならないことです)
また、原因の一つなのかは不明ですが、
コントロールセンターを開いた時は
willResignActiveNotification
が一度呼ばれるだけであるのに対し、
通知センターを開いた時はなぜか
willResignActiveNotification
didBecomeActiveNotification
willResignActiveNotification
というように呼ばれるようです。
該当するソースコード
// 輝度保存用の変数
private var currentBrightness: CGFloat = 0
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 通知の登録
NotificationCenter.default.addObserver(self, selector: #selector(willResignActiveNotification(_:)), name: UIApplication.willResignActiveNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActiveNotification(_:)), name: UIApplication.didBecomeActiveNotification, object: nil)
// その時点の輝度の保存
currentBrightness = UIScreen.main.brightness
// 画面を明るく
UIScreen.main.brightness = 1
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// 元の輝度に戻す
UIScreen.main.brightness = currentBrightness
// 通知の削除
NotificationCenter.default.removeObserver(self)
}
@objc private func willResignActiveNotification(_ notification: Notification) {
// 元の輝度に戻す
UIScreen.main.brightness = self.currentBrightness
}
@objc private func didBecomeActiveNotification(_ notification: Notification) {
// 元となる輝度の更新
currentBrightness = UIScreen.main.brightness
// 画面を明るく
UIScreen.main.brightness = 1
}
0 likes