IPhone - Game Center выбирает экран Leaderboard - как его можно отобразить?

Просматривая документацию по 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 ответа

Решение

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

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

Начиная с 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];
}

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

Другие вопросы по тегам