27

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

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

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

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

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

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

第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

6 回答 6

12

我在这里回答了一个类似的问题:IOS5 setBrightness did not work with applicationWillResignActive

iOS 并不意味着保留应用内亮度值。它应该在应用退出活动、退出、崩溃等后恢复系统值。所以正式在 applicationWillResignActive 中不需要这样做。

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

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

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

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

于 2012-05-03T03:27:19.553 回答
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];        
}
于 2012-02-11T19:50:41.277 回答
1

由于当前方法在应用程序委托方法中不起作用,因此您可以使用 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 做一些疯狂的事情,否则应该没问题。

于 2012-02-08T13:25:34.743 回答
0

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

- (void)applicationDidEnterBackground:(UIApplication *)application

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

- (void)applicationDidEnterBackground:(UIApplication *)application
{        
    sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright]; 
}
于 2011-11-29T19:22:03.283 回答
0

倒数第二行,您没有分配 sysBright 变量。

sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];        
于 2011-11-29T19:22:23.073 回答
-1

你叫同步吗?

[[NSUserDefaults standardUserDefaults] synchronize];
于 2013-01-23T23:56:24.607 回答