Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 覆盖Siri远程菜单按钮_Objective C_Tvos_Siri Remote - Fatal编程技术网

Objective c 覆盖Siri远程菜单按钮

Objective c 覆盖Siri远程菜单按钮,objective-c,tvos,siri-remote,Objective C,Tvos,Siri Remote,好的,我正在为tvOS制作一个游戏,我已经覆盖了菜单按钮。基本上,如果你在游戏中按下菜单按钮,你会被带到主菜单。如果您处于主菜单并按下菜单按钮,您将返回Apple TV主屏幕 下面是执行此操作的代码: - (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { UIPress* p = [presses anyObject]; switch (p.type)

好的,我正在为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;
    }
}
这可以正常工作,但有一个问题:如果你退出苹果电视主屏幕并返回应用程序而不退出,那么不管怎样,按下菜单按钮都会将你带回到苹果电视主屏幕

更奇怪的是,上面的方法被调用了,它甚至会运行quitGame方法。它不会调用[super PressesBegind:Press withEvent:event],至少在上述方法中不会调用,但它仍然会将用户带到主屏幕


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

您不仅可以覆盖PresseStart,还必须覆盖PresseEnd;否则它会触发并调用家长的默认行为退出您的应用程序。

您不仅可以覆盖PressesBegind,还必须覆盖PresseSend;否则,它会触发并调用家长的默认行为退出应用程序。

如果您退出apple TV主屏幕并返回应用程序,按下菜单按钮将返回apple TV主屏幕,您可能已经覆盖了“PresseEnded”代表,同时调用了其super,在PresseEnd内删除此超级呼叫。

如果您退出apple TV主屏幕并返回应用程序,但按下menu(菜单)按钮将返回apple TV主屏幕,则您可能已覆盖“PresseEnded”(按下取消)代表,同时调用其超级,按Send键删除此超级呼叫。

在这种情况下,游戏状态设置为什么?不管你的意思是什么,即使你重新开始玩游戏,菜单也会直接带你回家?@Wain我有大约9种不同的游戏状态,如kGameStateSelectCharacter、kGameStateInGame等。当这种情况发生时,它总是属于上述else类别的7种游戏状态之一。无论如何,我的意思是游戏状态不是kGameStateMainMenu。小心。我的游戏被苹果拒绝了,因为我使用菜单的方式与苹果预期的不同Apple@Stefan实际上,我的游戏在当前状态下已经被接受了。我已经提交了一个bug报告。在这种情况下,游戏状态设置为什么?不管你的意思是什么,即使你重新开始玩游戏,菜单也会直接带你回家?@Wain我有大约9种不同的游戏状态,如kGameStateSelectCharacter、kGameStateInGame等。当这种情况发生时,它总是属于上述else类别的7种游戏状态之一。无论如何,我的意思是游戏状态不是kGameStateMainMenu。小心。我的游戏被苹果拒绝了,因为我使用菜单的方式与苹果预期的不同Apple@Stefan实际上,我的游戏在当前状态下已经被接受了。不过我已经提交了一份bug报告。