applicationDidEnterBackground和applicationWillResignActive的替代品?

时间:2012-01-22 19:37:44

标签: objective-c ios

我有一个用[UIScreen mainScreen].brightness = newBrightness更改屏幕亮度的应用程序,我希望在用户完成使用后将亮度恢复到之前的状态。

我尝试过这两种委托方法:

  • - (void)applicationDidEnterBackground:(UIApplication *)application
  • - (void)applicationWillResignActive:(UIApplication *)application

但没有太大的成功。我怀疑我的应用必须在前台才能改变亮度?当我更改didEnterBackgroundMethod中的亮度时,它根本没有效果。当我使用willResignActive时,如果我切换到另一个应用程序,恢复亮度,但是当我按下主页按钮时它无效。

在应用程序离开前台之前是否有任何通知或委托方法执行?

2 个答案:

答案 0 :(得分:0)

这似乎也发生在其他人身上:见S.O. post

只是绕过它似乎忘记了setBrightness并通过在你的视图上覆盖黑色半透明来模拟它......

老答案:

在应用程序进入后台状态之前按主页按钮时,也应调用

willResignActive

  

调用此方法可让您的应用程序知道它即将从活动状态转为非活动状态。对于某些类型的临时中断(例如来电或SMS消息)或当用户退出应用程序并且它开始转换到后台状态时,可能会发生这种情况。处于非活动状态的应用程序继续运行,但不会将传入事件分派给响应者。

这也是我见证的行为。所以,我的猜测(但这只是一个猜测)是你的应用程序没有设置为支持背景,所以当按下主页按钮时它终止。在这种情况下,不会调用applicationDidEnterBackground

我建议检查项目中的info.plist文件UIApplicationExitsOnSuspend或“选择应用程序不在后台运行”键。

此外,您可以尝试在这些函数中放置一些断点(或NSLog跟踪),并检查它们是否按预期有效调用。

答案 1 :(得分:0)

根据Apple´s DevForum,似乎苹果不想很快解决这个问题。