0

这就是我在这个 iO7 或更高版本的应用程序上要做的事情:

当用户打开我的应用程序时,我想获取屏幕亮度值并一路调高亮度。当用户离开应用程序时,我希望亮度恢复到以前的值。

到目前为止,我使用这个:

-(void) applicationWillResignActive
{
    [[UIScreen mainScreen] setBrightness:oldScreenBrightness];
}

-(void) applicationDidBecomeActive
{
    screenBrightness = [UIScreen mainScreen].brightness;
    [[UIScreen mainScreen] setBrightness:1.0];
}

这很好用,除了如果用户在使用应用程序时通过控制中心调整亮度,它仍然会在不应该离开应用程序时恢复到旧的亮度。

所以我想知道,如果我可以Key Value Observe [UIScreen mainScreen].brightness并检查它是否被用户更改以省略将其更改回旧值......

4

2 回答 2

2

根据 Apple Developer 文档:

应用程序所做的亮度更改仅在应用程序处于活动状态时才有效。当您的应用不在前台时,系统会在适当的时候恢复用户提供的亮度设置。所以如果你改变了这个属性的值,你就不需要记录之前的值并在你的应用程序移动到后台时恢复它。

于 2015-09-17T03:04:18.733 回答
1

我认为你过于复杂了。在你出去的路上,检查当前的亮度水平。如果是1.0,请将其切换回您开始时获得的任何内容。如果不是1.0,您可以确信用户将其更改为其他内容,因此什么也不做。

最好为屏幕亮度创建某种常量,以使代码更具可读性和意图清晰。

static const CGFloat kAppConfiguredBrightness = (CGFloat)1.;

-(void)applicationWillResignActive
{
  UIScreen* screen = [UIScreen mainScreen];
  if (screen.brightness == kAppConfigredBrightness) {
    screen.brightness = oldScreenBrightness;
  }
}
于 2014-09-29T23:15:44.137 回答