1

当我浏览苹果文档时,我看不到打开游戏中心的方法,其中第一个屏幕是用户可以选择排行榜的地方。

我知道我可以打开特定的排行榜屏幕,但我想打开让用户选择一个的屏幕。那可能吗 ?

这是我目前的代码:

GKLeaderboardViewController *viewController = [[GKLeaderboardViewController alloc] init];
        viewController.leaderboardDelegate = self;
        // Present leaderboard with the user's options saved from prevous launch
        viewController.category = self.category;
        viewController.timeScope = self.timeScope;

        [parent presentModalViewController:viewController animated:YES];

谢谢!!

4

3 回答 3

6

这是一个未记录的解决方法,但在我参与的多个游戏中得到了批准:

    GKLeaderboardViewController *viewController = [[GKLeaderboardViewController alloc] init];
    viewController.leaderboardDelegate = self;

    [viewController popViewControllerAnimated:NO];
    [parent presentModalViewController:viewController animated:YES];
    [viewController release];

解释:

  • GKLeaderboardViewController是一个子类UINavigationController
  • 特定类别的视图控制器自动位于排行榜视图控制器的导航堆栈之上
  • 在显示之前,您已经可以修改导航堆栈
  • 通过不设置动画,弹出会立即发生,甚至在视图控制器出现之前。

您可以跳过设置类别和时间范围,因为您不需要它们(您不会显示特定的“类别”视图控制器)。即使您没有设置它,排行榜视图控制器也会将默认视图控制器推到顶部。

我还发布了viewController变量(排行榜视图控制器),因为parent视图控制器将获得对象的所有权。因此,不释放它会造成内存泄漏,并可能产生其他意想不到的后果。


iOS 6 及更高版本有GKGameCenterViewController课程。与 GameKit 的弱链接并使用NSClassFromString(@"GKGameCenterViewController") != nil. 然后,像往常一样使用它。

实例化此类而不是GKLeaderboardViewController并将其viewState属性设置GKGameCenterViewControllerStateLeaderboards为立即显示排行榜。

于 2011-06-08T08:23:07.670 回答
1

从 iOS 6.0 开始,您应该这样做:

-(void)showLeaderboards
{
    GKGameCenterViewController *viewController = [GKGameCenterViewController new];
    viewController.viewState = GKGameCenterViewControllerStateLeaderboards;
    viewController.gameCenterDelegate = self;
    [self presentViewController:viewController animated:YES completion:nil];
}

- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)viewController
{
    [viewController dismissViewControllerAnimated:YES completion:nil];
}
于 2014-06-19T06:50:06.157 回答
0

得到苹果的答复,该功能目前不可用。

于 2011-01-05T13:05:28.253 回答