applicationWillResignActive和setBrightness不工作?
我使用[[UIScreen mainScreen] setBrightness:](在SDK 5.0中)更改我的应用程序中的系统背景灯。
以下步骤适用于我的应用程序:
-
激活应用程序,默认获取系统亮度,然后保存为sysBright。
-
用我的应用程序改变亮度,改变亮度,然后保存为appBright。
-
ResignActive应用程序与主页button或lockingbutton,将亮度设置为sysBright(步骤1的值,系统默认亮度)。
-
再次激活应用程序 然后它会重复上述步骤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];