6

问题是,我的阅读应用程序有一个按钮,可以将其置于黑暗主题模式。亮度降低 10%。当用户返回正常模式时,它被设置回记忆的亮度。但与此同时,实际系统亮度可能会因自动亮度调整或用户进入设置并在那里更改而发生变化。

亮度属性的问题是您只查询实际的屏幕亮度,而您设置的任何内容都只是暂时的,直到用户锁定屏幕。解锁后系统恢复为系统亮度。

如果 iOS 在系统更改亮度时会发送通知,那将很有帮助。在文档中找不到关于此的任何内容。

4

2 回答 2

8

搜索UIScreenBrightnessDidChangeNotification哪个是UIScreen类的一部分。它适用于 iOS 5.0 及更高版本。

于 2013-02-06T00:33:00.723 回答
4

如果您想在设备再次解锁时将亮度设置回编程值,请观察UIApplicationDidBecomeActiveNotification通知并在选择器中将亮度设置回您想要的级别。

我对整个亮度问题进行了更多研究,这就是我发现的:

仅当UIScreenBrightnessDidChangeNotification系统更改亮度或用户从控制面板或设置更改亮度时才会调用。不是当您以编程方式更改亮度时。

我从这里的 Apple Doc 中假设见下文)是,在您以编程方式设置亮度后,亮度将不再改变。

无论应用程序是否关闭,应用程序所做的亮度更改都会一直有效,直到设备被锁定。系统亮度(用户可以在“设置”或“控制中心”中设置)在下次打开显示器时恢复。

但是我发现这不是真的(或者我误解了它)。UIScreenBrightnessDidChangeNotification以编程方式设置亮度后,亮度确实会发生变化(并且会被调用)。然而,它只有在系统认为它应该增加或减少亮度时才会被调用(由于环境亮度的变化)*。如果环境的亮度保持不变,您的屏幕将保持与您以编程方式设置的一样亮。

这是什么意思?嗯,有两件事:

  • 如果您想将亮度保持在您以编程方式设置的级别,无论环境如何变化,您都必须在UIScreenBrightnessDidChangeNotification每次调用时观察并将亮度重置为您想要的级别。
  • 如果你想回到“系统”亮度,那你真的做不到,因为如果环境发生变化,你根本无法判断系统亮度是多少(因为你每次都在重置它)。为此,您有 2 个选项。
    1. 在以编程方式设置亮度并将其设置回该值之前,请记住亮度。或者
    2. 将亮度设置为 0.5,让系统开始工作。

这两种情况下的“危险”是它将保持在您设置的值上,直到检测到环境亮度变化。

*有两种特殊情况......当您将亮度设置为 0.0 并且系统认为它应该降低亮度时,没有任何反应,因为它已经处于 0.0。其次,当您将其设置为 1.0 时,无论环境如何变化,它都将保持在 1.0。

于 2016-04-21T15:56:16.120 回答