【问题标题】:Is [UIScreen mainScreen].brightness Key Value Observable?[UIScreen mainScreen].brightness 键值是否可观察?
【发布时间】:2014-11-24 11:05:11
【问题描述】:

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

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

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

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

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

这可以正常工作,但如果用户在使用应用程序时通过控制中心调整亮度,它仍会在不应该离开应用程序时恢复到旧亮度。

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

【问题讨论】:

  • 你试过了吗?首先自己尝试比发布问题并等待答案更快。
  • 还有UIScreenBrightnessDidChangeNotification 通知。试一试。

标签: ios screen brightness adjustment control-center


【解决方案1】:

根据 Apple Developer 文档:

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

【讨论】:

    【解决方案2】:

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

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

    static const CGFloat kAppConfiguredBrightness = (CGFloat)1.;
    
    -(void)applicationWillResignActive
    {
      UIScreen* screen = [UIScreen mainScreen];
      if (screen.brightness == kAppConfigredBrightness) {
        screen.brightness = oldScreenBrightness;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2014-07-31
      • 2014-07-28
      相关资源
      最近更新 更多