applicationDidEnterBackground和applicationWillResignActive的替代品?

问题描述:

我有一个应用程序,它可以通过[UIScreen mainScreen].brightness = newBrightness来改变屏幕亮度,并且当用户完成使用时,我想恢复到之前的状态。applicationDidEnterBackground和applicationWillResignActive的替代品?

我已经试过这两个委托方法:

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

但不是很成功。我怀疑我的应用程序必须在前台来改变亮度?当我改变didEnterBackgroundMethod的亮度时,它根本没有效果。当我使用willResignActive确实恢复亮度,如果我切换到另一个应用程序,但它没有效果时,我按主页按钮。

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

这似乎也发生在别人身上:请参阅S.O. post

只有这样,周围似乎忘记了setBrightness,并通过覆盖在您的视图中的黑色半透明模拟它...

OLD答:

当你按下willResignActive也应该叫应用程序进入后台状态之前的主页按钮。

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

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

我会建议检查项目中的info.plist文件UIApplicationExitsOnSuspend或“选择应用程序不在后台运行”键。此外,您可以尝试在这些函数中放置一些断点(或NSLog跟踪),并检查它们是否按预期有效调用。

+0

事件总是被调用,我已经通过调试进行了确认。问题是改变亮度的API没有任何效果,可能是因为已经发生了到后台的转换。 –

根据Apple´s DevForum这似乎是Apple不想很快修复的错误。