IOS5 setBrightness无法与applicationWillResignActive一起使用

时间:2011-11-26 18:47:19

标签: iphone objective-c ios5 brightness

我使用[[UIScreen mainScreen]setBrightness: ](在sdk 5.0中)更改应用中的系统背景灯。

以下步骤适用于我的应用

  1. 激活应用,默认获取系统亮度,然后保存为sysBright

  2. 使用我的应用更改亮度,更改亮度,然后保存为appBright

  3. 使用主页按钮或锁定按钮的ResignActive应用程序,将亮度设置为sysBright(步骤1值,系统默认亮度)。

  4. 再次激活应用。然后它将重复上述步骤1至3。

  5. 第3步出现问题,当我使用锁定按钮取消激活应用程序时,函数applicationWillResignActive效果很好,它可以恢复亮度值(sysBright)。

    但是当我按下主页按钮时,它不再起作用了。亮度仍然是我在我的应用程序中更改的值。 (appBright

    有人对此有任何想法吗?谢谢你的帮助〜

    以下是代码:

    float appBright,sysBright;
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        sysBright = [[UIScreen mainScreen] brightness];
        [[NSUserDefaults standardUserDefaults] setFloat:sysBright forKey:@"sysBright"];
    
        [[UIScreen mainScreen] setBrightness:appBright];
    }
    
    //doesn't work when i ResignActive with the home button
    - (void)applicationWillResignActive:(UIApplication *)application
    {        
        [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
        [[UIScreen mainScreen] setBrightness:sysBright];        
    }
    

4 个答案:

答案 0 :(得分:5)

iOS并不意味着保留应用内亮度值。它应该在应用程序重新激活,退出,崩溃等之后恢复系统值。因此,在applicationWillResignActive中没有必要这样做。

但它不起作用。这是一个错误。事实上,如果您切换到另一个应用程序(按两次主页按钮,然后选择另一个应用程序),它就可以使用

不要浪费你的时间只是向Apple提交错误报告(我做得很好)。

解锁屏幕可恢复默认系统亮度。只需按两下电源按钮并解锁即可恢复原始亮度。

答案 1 :(得分:1)

试试这个......

- (void)applicationWillResignActive:(UIApplication *)application
{        
    CGFloat brightness = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:brightness];        
}

答案 2 :(得分:0)

有些情况下确实需要暂停应用程序(使其转到后台,就像按下“主页”按钮一样),并且仍然保留先前在屏幕上设置的亮度。< / p>

实施例: 我目前正在进行水下应用(由于科学原因,它在防水盒中用iPhone拍照),而且我们无法访问整个设备屏幕。

水下外壳实现3机械&#34;触摸&#34;在非常具体的地方按钮,我们必须禁用自动锁定功能,因为无法执行滑动手势来解锁设备。

我们仍然需要一种方法来在不使用应用程序时保持电池寿命,即暂停应用程序并设置较低的屏幕亮度。

我们实施的解决方案是:

a)我们告诉用户在设置中关闭自动亮度并禁用自动锁定功能

b)我们在ApplicationDelegate类上将亮度调为100%:

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

c)我们通过触摸应用程序按钮执行以下代码,以确保应用程序进入后台(不消耗CPU周期)并且亮度可以降低到更低级别(保留电池):

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

我希望这对某人有帮助。

PS:Apple Human界面指南是一回事,实际应用程序的实际需求是另一回事(您无法提前预测或限制任何内容)。

答案 3 :(得分:0)

根据Apple´s DevForum,这似乎是苹果不愿修复的错误。