1

GameCenter を開くことができます。ただし、右上隅にある [完了] ボタンを押して GameCenter を閉じても、GameCenter は開いたままです。GameCenter を閉じるにはどうすればよいですか?

以下は私のコードです:

- (void) presentLeaderboards
{
    GKGameCenterViewController *leaderboardController = [[GKGameCenterViewController alloc] init];
    if (leaderboardController != nil)
    {
        leaderboardController.viewState = GKGameCenterViewControllerStateLeaderboards;
        UIViewController *vc = self.view.window.rootViewController;
        [vc presentViewController: leaderboardController animated: YES completion:nil];
    }
}

- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)viewController
{
    NSLog(@"Close");
    UIViewController *vc = self.view.window.rootViewController;
    [vc dismissViewControllerAnimated:YES completion:nil];
}
4

1 に答える 1

1
  1. あなたのメソッドが呼び出されることはないGKGameCenterViewControllerので、デリゲートを設定することはありません。gameCenterViewControllerDidFinish:これは、少しデバッグして自分で見つけたはずです。

  2. に電話dismissViewControllerAnimatedしてviewControllerください。

コードは次のようになります。

- (void) presentLeaderboards
{
    GKGameCenterViewController *leaderboardController = [[GKGameCenterViewController alloc] init];
    if (leaderboardController != nil)
    {
        leaderboardController.gameCenterDelegate = self;
        leaderboardController.viewState = GKGameCenterViewControllerStateLeaderboards;
        UIViewController *vc = self.view.window.rootViewController;
        [vc presentViewController: leaderboardController animated: YES completion:nil];
    }
}

- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)viewController
{
    NSLog(@"Close");
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

次の行を追加します。

leaderboardController.gameCenterDelegate = self;

新たなエラーを引き起こす可能性があります。その場合、@implementation行の前に .m に次を追加する必要があります。

@interface MyViewControllerNameHere () <GKGameCenterControllerDelegate>

@end

クラス拡張機能が既にある場合は、そのGKGameCenterControllerDelegate部分を追加するだけです。

于 2015-12-12T22:46:35.573 に答える