IPhone - Game Center выбирает экран Leaderboard - как его можно отобразить? - PullRequest
1 голос
/ 26 декабря 2010

Когда я просматриваю документацию Apple, я не вижу способа открыть 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];

Спасибо !!

Ответы [ 3 ]

6 голосов
/ 08 июня 2011

Вот недокументированный обходной путь, но он был одобрен в нескольких играх, над которыми я работал:

    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, чтобы списки лидеров отображались немедленно.

1 голос
/ 19 июня 2014

Начиная с 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];
}
0 голосов
/ 05 января 2011

Получил ответ от Apple, что эта функция в данный момент недоступна.

...