Добавление эффекта затухания анимации при изменении яркости UIScreen (Swift)

Просто интересно, возможно ли вообще изменить яркость экрана с эффектом затухания. Яркость экрана можно изменить с помощью UIScreen.mainScreen().brightness = CGFloat(1), но это сразу же изменит текущую яркость на переменную.

Я хочу знать, можете ли вы анимировать изменение яркости. Например, текущая яркость 0,2, и я хочу изменить ее на 0,8 с эффектом затухания с шагом 0,1, пока не достигнет 0,8.

Можно ли это сделать в Swift 2.3?


person Z-Dog    schedule 26.11.2016    source источник
comment
Я не уверен, что вы поддержали мой ответ. Но ваш принятый ответ - плохая практика использования таймера для достижения анимации? И подумайте об изменении значения альфа, а не яркости экрана?   -  person Joe    schedule 29.11.2016


Ответы (2)


Есть готовые методы анимации для UIView и CALayers. Но в вашем случае вы хотите анимировать свойство UIScreen, поэтому вам нужно сделать это вручную с помощью таймера, чтобы постепенно изменять яркость с 0,1 до 0,8 с течением времени.

    var timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)

    func update() {
        if (UI.mainScreen().brightness >= 0.8) {
           Timer.invalidate(timer)
        }
        else {
        UIScreen.mainScreen().brightness += 0.1
        }
    }

Это изменит яркость на 0,1 каждые 0,4 секунды. Когда он достигает значения 0,8 или более, он останавливается. Вы можете сделать более постепенный или немедленный эффект, играя с параметром timerInterval.

person gwinyai    schedule 26.11.2016
comment
Кажется, что яркость снова увеличивается, как только пользователь снижает ее, даже после того, как таймер истечет. Хорошо, я отправил исправление. - person Daniel Springer; 31.07.2018

Примечание. Я рекомендую вам изменить значение view alpha, а не играть с яркостью экрана.

Попробуйте этот простой подход внутри вашего viewDidLoad, чтобы выполнить анимацию. Если вы все еще хотите использовать метод яркости, код почти такой же.

 self.view.alpha = 0.2 // UIScreen.mainScreen().brightness = 0.2
//animation duration value is changeable...
 UIView.animate(withDuration: 3, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations:  {
 self.view.alpha = 0.8 // UIScreen.mainScreen().brightness = 0.8
 }, completion: nil)
person Joe    schedule 26.11.2016