【发布时间】:2011-09-30 05:36:15
【问题描述】:
我想在系统显示 UIAlertView 时收到消息,以便我可以暂停游戏。
有人知道怎么解决吗?
UIAlertView 不是我自己控制的。
【问题讨论】:
标签: iphone notifications uialertview
我想在系统显示 UIAlertView 时收到消息,以便我可以暂停游戏。
有人知道怎么解决吗?
UIAlertView 不是我自己控制的。
【问题讨论】:
标签: iphone notifications uialertview
系统警报通常显示在其自己的UIWindow 中。为UIWindowDidBecomeVisibleNotification 和UIWindowDidBecomeHiddenNotification 通知安装处理程序以分别跟踪UIWindow 何时变为可见和隐藏:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(aWindowBecameVisible:)
name:UIWindowDidBecomeVisibleNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(aWindowBecameHidden:)
name:UIWindowDidBecomeHiddenNotification
object:nil];
在处理程序中,从通知的object 属性中获取更改状态的UIWindow:
- (void)aWindowBecameVisible:(NSNotification *)notification
{
UIWindow *theWindow = [notification object];
NSLog(@"Window just shown: %@", theWindow);
}
- (void)aWindowBecameHidden:(NSNotification *)notification
{
UIWindow *theWindow = [notification object];
NSLog(@"Window just hidden: %@", theWindow);
}
最后,检查theWindow 是否包含UIAlertView 类型的子视图。
【讨论】:
应用程序委托的applicationWillResignActive: 将在中断时被调用。您可以在那里处理暂停,甚至可以在视图控制器中收听UIApplicationWillResignActiveNotification 并在那里暂停游戏。
您可以查看iOS 应用指南的this part,其中详细介绍了应用的生命周期和状态转换。
【讨论】:
如果您的 UIAlertView 来自第三方应用(而不是来自您的应用),那么您可以实现以下委托方法来暂停和恢复游戏。
暂停游戏
- (void)applicationWillResignActive:(UIApplication *)application {
}
继续游戏
- (void)applicationDidBecomeActive:(UIApplication *)application {
}
例如,如果您收到电话或短信,您可以使用上述委托来暂停/恢复游戏。
【讨论】:
做这个:
- (void)applicationWillResignActive:(UIApplication *)application {
//pause
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
//resume
}
【讨论】: