2016-11-26 72 views
0

想知道是否完全可以使用淡入淡出效果更改屏幕亮度。屏幕亮度可以使用UIScreen.mainScreen().brightness = CGFloat(1)进行更改,但只是立即将当前亮度更改为变量。更改UIScreen亮度时添加动画淡入效果(Swift)

我想知道您是否可以对亮度变化进行动画处理。例如,当前亮度为0.2,我想用0.1的渐变效果将其更改为0.8,直到达到0.8为止

这可以在swift 2.3中完成吗?

+0

我不确定你是否upvote我的answer.but你接受的答案是一个不好的做法,使用计时器来实现动画?考虑改变alpha值而不是屏幕亮度? – Joe

回答

1

有为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参数进行更渐进或立即的效果。

1

注:我建议你改变view alpha的值,而不是屏幕亮度。

试试这个简单的方法在你的viewDidLoad里面来完成动画。如果你仍然想使用亮度method.code几乎相同。

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)