这就是我在iO7或更高版本的应用程序上要做的事情:
当用户打开我的应用程序时,我想获得屏幕亮度值并一直调高亮度。当用户离开应用程序时,我希望亮度恢复到之前的值。
到目前为止,我使用了这个:
-(void) applicationWillResignActive
{
[[UIScreen mainScreen] setBrightness:oldScreenBrightness];
}
-(void) applicationDidBecomeActive
{
screenBrightness = [UIScreen mainScreen].brightness;
[[UIScreen mainScreen] setBrightness:1.0];
}
这样可以正常工作,但是,如果用户使用应用程序通过Control Center WHILE调整亮度,则在离开应用程序时它仍会恢复到原来的亮度。
所以我想知道,如果我能键值观察[UIScreen mainScreen] .brightness 并检查用户是否更改了它以省略将其更改回旧值....
答案 0 :(得分:2)
根据Apple Developer docs:
只有在应用处于活动状态时,应用所做的亮度更改才会生效。当您的应用不在前台时,系统会在适当的时间恢复用户提供的亮度设置。因此,如果您更改此属性的值,则无需记录先前的值,并在应用移至后台时将其还原。
答案 1 :(得分:1)
我认为你过度复杂了。在出门的路上,检查当前的亮度级别。如果是1.0
,请将其切换回您开始时获得的任何内容。如果它不是1.0
,那么您可以相信用户将其更改为其他内容,所以什么都不做。
最好为屏幕亮度创建某种常量,以使代码更具可读性和意图清晰。
static const CGFloat kAppConfiguredBrightness = (CGFloat)1.;
-(void)applicationWillResignActive
{
UIScreen* screen = [UIScreen mainScreen];
if (screen.brightness == kAppConfigredBrightness) {
screen.brightness = oldScreenBrightness;
}
}