Переопределение кнопки Siri Remote Menu

Итак, я делаю игру для tvOS и переопределяю кнопку меню. По сути, если вы находитесь в игре и нажимаете кнопку меню, вы попадаете в главное меню. Если вы находитесь в главном меню и нажимаете кнопку меню, вы вернетесь на главный экран Apple TV.

Вот код для этого:

- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
{
    UIPress* p = [presses anyObject];

    switch (p.type) {
        case UIPressTypeMenu:

            NSLog(@"Test");

            if(self.gamestate == kGameStateMainMenu)
            {
                [super pressesBegan:presses withEvent:event];
            }
            else if(self.gamestate == kGameStateResetting)
            {

            }
            else
            {
                self.gamestate = kGameStateResetting;
                [self quitGame];
            }

            break;

        default:
            break;
    }
}

Это работает правильно, но есть одна проблема: если вы выйдете на главный экран Apple TV и вернетесь в приложение (не выходя из него), то, несмотря ни на что, нажатие кнопки меню вернет вас на главный экран Apple TV.

Что еще более странно, вышеописанный метод вызывается, и он даже запускает метод quitGame. Он не вызывает [super pressesBegan:presses withEvent:event], по крайней мере, в приведенном выше методе, но все равно переводит пользователя на главный экран.

Это баг, или я что-то пропустил?


person David    schedule 27.10.2015    source источник
comment
Какое состояние игры установлено в этом случае? И независимо от того, что вы имеете в виду, даже если вы вернулись к игре, меню приведет вас прямо домой?   -  person Wain    schedule 28.10.2015
comment
@Wain У меня есть около 9 различных игровых состояний, таких как kGameStateSelectCharacter, kGameStateInGame и т. д. Когда это происходит, это всегда одно из 7 игровых состояний, которые попадают в категорию else выше. Несмотря ни на что, я имею в виду, что состояние игры не kGameStateMainMenu.   -  person David    schedule 28.10.2015
comment
Будь осторожен. Моя игра была отклонена Apple, потому что я использовал меню не так, как ожидал Apple.   -  person Stefan    schedule 29.10.2015
comment
@Stefan На самом деле, моя игра уже была принята в ее текущем состоянии. Я отправил отчет об ошибке, хотя.   -  person David    schedule 29.10.2015


Ответы (2)


Вы не можете только переопределить pressesBegan — вы также должны переопределить pressesEnded; в противном случае он срабатывает и вызывает поведение родителя по умолчанию, чтобы отказаться от вашего приложения.

person Robin Harbron    schedule 06.01.2016

если вы выйдете на главный экран Apple TV и вернетесь в приложение, а нажав кнопку меню, вы вернетесь на главный экран Apple TV, вы, вероятно, перезаписали делегата «pressesEnded», также вспомнив его супер, удалите этот супер звонок внутри нажимаетEnded.

person Danilo    schedule 24.01.2016