IOS5 setBrightness didn't work with applicationWillResignActive

前端 未结 4 2107
陌清茗
陌清茗 2021-01-04 17:02

I use [[UIScreen mainScreen]setBrightness: ] (in sdk 5.0) to change the system background light in my app.

The following steps work with my app

相关标签:
4条回答
  • 2021-01-04 17:33

    According to Apple´s DevForum it seems to be a bug that Apple is unwilling to fix.

    0 讨论(0)
  • 2021-01-04 17:43

    Try this...

    - (void)applicationWillResignActive:(UIApplication *)application
    {        
        CGFloat brightness = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
        [[UIScreen mainScreen] setBrightness:brightness];        
    }
    
    0 讨论(0)
  • 2021-01-04 17:47

    iOS is not meant to retain in-app brightness values. It should restore system value after the app resigns active, quits, crashes etc. So officially there is no need to do that in applicationWillResignActive.

    But it does't work. It's a bug. In fact it works if you switch to another app (press home button twice and select another app)

    Don't waste your time just file a bug report to Apple (I did well).

    Unlock screen restores default system brightness. Just press the power button twice and unlock to restore original brightness.

    0 讨论(0)
  • 2021-01-04 17:52

    There are cases when you really need to suspend the application (make it go to background, like when you push the Home button) and still preserve the brightness you have previously set on the screen.

    Example: I 'm currently working on an underwater application (it takes photos with an iPhone in an waterproof case for scientific reasons) and we don't have access to the whole device screen.

    The underwater housing implements 3 mechanical "touch" buttons on very specific places and we have to disable the auto-lock feature because there is no way to perform a slide-gesture to unlock the device.

    We still need a way to preserve battery life when not using the application i.e. suspend the application and setting a low level on screen brightness.

    The solution we implemented is:

    a) We tell the user to turn the Auto-Brightness off in settings and disable the auto-lock feature

    b) We turn the Brightness to 100% on ApplicationDelegate class:

    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        // Adjust Brightness to full
        [[UIScreen mainScreen] setBrightness:1.0];
    }
    

    c) We execute the following code with the touch on an application button, to ensure that the application goes to background (not consuming CPU cycles) and the brightness go to lower level possible (preserve battery):

    [[UIScreen mainScreen] setBrightness:0.0]; // Set to low brightness
    [[UIApplication sharedApplication] performSelector:@selector(suspend)]; // Simulate Home button
    

    I hope this could be helpful to somebody.

    PS: The Apple Human interface guides is one thing and the actual needs of a real-world application is another (you cannot predict or restrict anything in advance).

    0 讨论(0)
提交回复
热议问题