为什么不能设置UIScreen.main.brightness?

时间:2020-05-13 01:49:58

标签: ios swift iphone

我刚刚开始制作一个新应用。代码UIScreen.main.brightness = 1.0在任何地方都无效。我在viewDidLoad中尝试过,在viewWillAppear中尝试过。我注释掉了其他所有内容,并使它成为唯一运行的代码行,但是它没有用。我无法更改亮度。我正在iPhone(iOS 13.4.1)的真实设备上尝试使用它。可能是什么原因?

编辑:还尝试了一个新的Xcode项目。仍然不起作用。

2 个答案:

答案 0 :(得分:4)

我注意到在iOS 13中,从viewDidLoad和viewWillAppear调用UIScreen.main.brightness无效。将其添加到viewDidAppear可以正常工作。

按一下按钮也可以很好地工作。

import UIKit

class ViewController: UIViewController {
    var brightness: CGFloat = 1.0
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let button = UIButton(type: .infoDark)

        // This call is ignored
        UIScreen.main.brightness = CGFloat(0.3)
        view.addSubview(button)
        button.frame = CGRect(x: 40.0, y: 100.0, width: button.frame.width, height: button.frame.height)
        button.addTarget(self, action: #selector(toggle), for: .touchUpInside)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // This call is also ignored
        UIScreen.main.brightness = CGFloat(0.8)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        // This call sets the brightness
        UIScreen.main.brightness = 0.5
    }

    @objc func toggle() {
        brightness = brightness - 0.2
        print("brightness is \(brightness)")
        if brightness < 0 { brightness = 1.0 }
        // This call changes the brightness
        UIScreen.main.brightness = brightness
    }

}

答案 1 :(得分:0)

我发现了一些有趣的东西! 如果您通过代码设置亮度-但随后用户从系统UI手动更改了亮度,则您将不再能够通过代码更改亮度(直到应用重新启动)-Apple可能有某种逻辑来防止过于频繁/不必要的更改。< / p>

这只是我的观察-文档中没有此类信息