applicationWillResignActive和setBrightness无法正常工作?

时间:2011-11-29 19:12:56

标签: iphone ios delegates 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];        
    }
    

    我错过了什么吗?

6 个答案:

答案 0 :(得分:11)

我在这里回答了类似的问题:IOS5 setBrightness didn't work with applicationWillResignActive

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

但它不起作用。 这是一个错误。事实上,如果您尝试切换到另一个应用程序,它会起作用。尝试按两次主页按钮,亮度消失。

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

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

更新: 我的错误报告已关闭,因为根据Apple的说法,这不是一个错误。这很奇怪。

答案 1 :(得分:1)

由于当前的方法不适用于app委托方法,因此您可以使用Adam所描述的UIView。

在委托h文件中创建一个UIView lvar:

UIView *view_;

然后在实施中:

// create view in app delegate didFinishLaunchingWithOptions method and add it to the window
view_ = [[UIView alloc] initWithFrame:self.window.frame]; // delegate lvar
[view_ setBackgroundColor:[UIColor blackColor]];
[view_ setAlpha:0.5];
[self.window addSubview:view_];
[self.window makeKeyAndVisible];
return YES;

根据需要将视图设置为屏幕或视图控制器的大小。并确保它在所有其他子视图之上。

请记住,这会对应用的图形性能产生重大影响,但除非您在使用UI做一些疯狂的事情,否则应该没问题。

答案 2 :(得分:1)

您是否尝试为执行UIApplicationWillResignActiveNotification后发送的applicationWillResignActive注册主视图控制器(或其中的任何对象)?

这将使您有机会修改applicationWillResignActive之外的亮度。不知道这种方法是否有任何区别,但尝试它应该很容易。

只需致电:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResign) name:UIApplicationWillResignActiveNotification object:nil];

然后定义:

- (void)appWillResign {
    [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright];        
}

答案 3 :(得分:0)

当您点按主页按钮时,您的应用程序不会退出活动状态,而是进入“后台模式”并拥有您自己的委托方法,您需要定义:

- (void)applicationDidEnterBackground:(UIApplication *)application

这样的事情(除了applicationDidBecomeActive:委托方法之外)应该得到预期的行为:

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

答案 4 :(得分:0)

倒数第二行,您没有指定sysBright变量。

sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];        

答案 5 :(得分:-1)

你打电话给同步吗?

[[NSUserDefaults standardUserDefaults] synchronize];