applicationWillResignActive和setBrightness不工作?

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

以下步骤适用于我的应用程序:

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

  2. 用我的应用程序改变亮度,改变亮度,然后保存为appBright。

  3. ResignActive应用程序与主页button或lockingbutton,将亮度设置为sysBright(步骤1的值,系统默认亮度)。

  4. 再次激活应用程序 然后它会重复上述步骤1到3。

第3步有些问题,当我用锁buttonclosures应用程序时,applicationWillResignActive函数运行良好,它可以恢复亮度值(sysBright)。

但是,当我按下主页button,它不再工作。 亮度仍然是我在我的应用程序中更改的值。 (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]; } 

我错过了什么?

我在这里回答了一个类似的问题: IOS5 setBrightness没有与applicationWillResignActive一起工作

iOS并不意味着保留应用内亮度值 。 它应该在应用程序退出活动,退出,崩溃等应用程序恢复系统的价值。因此,正式在applicationWillResignActive没有必要这样做。

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

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

解锁屏幕恢复默认的系统亮度。 只需按两次电源button,解锁即可恢复原来的亮度。

更新:我的错误报告被closures,因为根据苹果这不是一个错误。 真奇怪。

由于当前方法在应用程序委托方法中不起作用,因此可以使用Adam所描述的UIView。

在委托h文件中创build一个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; 

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

请记住,这将对应用程序的graphics性能产生重大影响,但是除非您对UI做了一些疯狂的事情,否则应该没问题。

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

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

只需致电:

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

然后定义:

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

倒数第二行,你没有分配sysBrightvariables。

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

当你点击主页button,你的应用程序不会退出活动,而是进入“背景模式”,并有自己的委托方法,你需要定义:

 - (void)applicationDidEnterBackground:(UIApplication *)application 

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

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

你叫同步吗?

 [[NSUserDefaults standardUserDefaults] synchronize];