如果单击主页按钮,则停止游戏应用 iOS

Stop Game App if Home Button clicked iOS

我不知道根据 Apple 的规则是否有必要实现当用户在游戏中时,如果他们点击主页按钮游戏暂停,当他们在游戏中点击返回时,游戏取消暂停.

我是否必须单击故事板上的某些内容才能显示主页按钮?我不知道。

由于 Storyboards 上没有主页按钮,所以我该如何编写代码,当用户单击主页按钮退出应用程序时,游戏会暂停。当他们再次 return 时,游戏将取消暂停。

如果单击主页按钮,将调用您的 App Delegate 的方法 applicationDidEnterBackground:。因此,您可以根据自己的喜好做出回应。

但是,您可能不需要在此处执行任何特殊操作,因为当您的应用程序进入后台时,它会 暂停 — 它会停止 运行。因此,从某种意义上说,它会自动暂停。例如,计时器暂停。 (请注意,此功能(计时器的自动暂停)在 iOS 8 模拟器中已损坏;但它在设备上可以正常工作。)

如果您制作的是一款简单的游戏,则无需执行任何操作即可暂停。内存管理机制会处理它。

但是,如果您制作的游戏需要某些功能(例如互联网连接),您将不得不处理如何处理您的任务。例如,请查看苹果的 UIApplicationDelegate 参考页。查看 "Managing State Transitions" 部分以获得更好的理解。

在iOS模拟器中,您可以"press the home button"使用CMD+SHIFT+H快捷方式。

您可以在 UIApplicationDelegate 实现中覆盖以下方法:

applicationWillResignActive: (Called when leaving the foreground state.)
applicationWillEnterForeground: (Called when transitioning out of the background state.)

或者您可以使用 NSNotificationCenter 和等效的通知:

UIApplicationWillEnterForegroundNotification
UIApplicationWillResignActiveNotification

当 iOS 将您的应用置于后台时,它实际上已暂停,因为它不再是 运行(音乐播放器、GPS 消费者等除外)。但是您的渲染循环没有做任何事情。但是,您的应用程序可能会在这种状态下被终止,因此您可能需要进行一些簿记以保持您的应用程序状态一致。暂停您的应用、保存用户进度等,然后 resume/restart 并在您回来时加载该信息不会有什么坏处。

有两种实现方式:

1: 使用 NSNotificationCenter:

- (void)setupBackgroundNotification {
    // the same to applicationWillEnterForeground:
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(open)
                                                 name: UIApplicationWillEnterForegroundNotification
                                               object:nil];

    //// the same to applicationWillResignActive
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(close)
                                                 name: UIApplicationWillResignActiveNotification
                                               object:nil];
}


- (void)open {
    NSLog(@"the same to applicationWillEnterForeground");
}

- (void)close {
    NSLog(@"the same to applicationWillResignActive");
}

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:applicationWillEnterForeground object:Nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:applicationWillResignActive object:Nil];
}

2:使用UIApplicationDelegate委托方法

- (void)applicationWillResignActive:(UIApplication *)application
{
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}