How to set screen brightness with fade animations?

后端 未结 7 1537
梦如初夏
梦如初夏 2021-01-02 11:32

Is it possible to animate the screen brightness change on iOS 5.1+? I am using [UIScreen mainScreen] setBrightness:(float)] but I think that the abrupt change i

相关标签:
7条回答
  • 2021-01-02 12:31

    You can use this helper if you need to change brightness of your specific ViewController

    import Foundation
    import UIKit
    
    final class ScreenBrightness {
    
        private var timer: Timer?
        private var brightness: CGFloat?
        private var isBrighteningScreen = false
        private var isDarkeningScreen = false
    
        private init() { }
    
        static let shared = ScreenBrightnessHelper()
    
        //Увеличение яркости экрана до максимального уровня
        func brightenDisplay() {
            resetTimer()
            isBrighteningScreen = true
            if #available(iOS 10.0, *), timer == nil {
                brightness = UIScreen.main.brightness
                timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { (timer) in
                    UIScreen.main.brightness = UIScreen.main.brightness + 0.01
                    if UIScreen.main.brightness > 0.99 || !self.isBrighteningScreen {
                        self.resetTimer()
                    }
                }
            }
            timer?.fire()
        }
    
        //Затемнение экрана до предыдущего уровня
        func darkenDisplay() {
            resetTimer()
            isDarkeningScreen = true
            guard let brightness = brightness else {
                return
            }
            if #available(iOS 10.0, *), timer == nil {
                timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { (timer) in
                    UIScreen.main.brightness = UIScreen.main.brightness - 0.01
    
                    if UIScreen.main.brightness <= brightness || !self.isDarkeningScreen {
                        self.resetTimer()
                        self.brightness = nil
                    }
                }
                timer?.fire()
            }
        }
    
        private func resetTimer() {
            timer?.invalidate()
            timer = nil
            isBrighteningScreen = false
            isDarkeningScreen = false
        }
    }
    

    Call ScreenBrightness.shared.brightenDisplay() in viewWillAppear and if you wanna change it back call method ScreenBrightness.shared.darkenDisplay() that will change brightness back

    0 讨论(0)
提交回复
热议问题