1

好的,所以我正在为 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],至少在上述方法中没有,但它仍然将用户带到主屏幕。

这是一个错误,还是我错过了什么?

4

2 回答 2

4

您不仅可以覆盖 pressesBegan - 您还必须覆盖 pressesEnded;否则它会触发并调用父级的默认行为以退出您的应用程序。

于 2016-01-06T08:53:50.947 回答
0

如果您退出到 Apple TV 主屏幕并返回应用程序并按下菜单按钮将带您回到 Apple TV 主屏幕,您可能已经覆盖了“pressesEnded”代表,同时还调用了它的超级,删除这个超级在 pressesEnded 内调用。

于 2016-01-24T18:57:53.697 回答