【问题标题】:IPhone - Game Center's choose Leaderboard screen - how can it be displayed?iPhone - Game Center 的选择排行榜画面 - 怎么显示?
【发布时间】:2011-05-30 21:02:59
【问题描述】:

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

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

这是我目前的代码:

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];

谢谢!!

【问题讨论】:

    标签: iphone cocoa-touch game-center leaderboard


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

          GKLeaderboardViewController *viewController = [[GKLeaderboardViewController alloc] init];
          viewController.leaderboardDelegate = self;
      
          [viewController popViewControllerAnimated:NO];
          [parent presentModalViewController:viewController animated:YES];
          [viewController release];
      

      解释:

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

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

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


      iOS 6 及更高版本具有GKGameCenterViewController 类。与 GameKit 的弱链接并使用 NSClassFromString(@"GKGameCenterViewController") != nil 测试此类的存在。然后,照常使用。

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

      【讨论】:

      • 我没有时间检查,但我相信你它有效。谢谢:)
      • 很好的答案。它帮助了我。谢谢。:)@IvanVučica
      • 已更新。在查阅 StackOverflow 上三年前的帖子之前,您应该先阅读相关框架的文档并查看可用类的列表。 GKGameCenterViewController 在 iOS 6 中可用。
      【解决方案3】:

      从 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];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-06
        • 1970-01-01
        • 2014-12-01
        • 1970-01-01
        • 2014-07-14
        相关资源
        最近更新 更多