覆盖 Siri 远程菜单按钮

Posted

技术标签:

【中文标题】覆盖 Siri 远程菜单按钮【英文标题】:Overriding Siri Remote Menu Button 【发布时间】:2015-10-27 10:33:02 【问题描述】:

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

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

【问题讨论】:

在这种情况下,游戏状态设置为什么?而且不管你的意思是什么,即使你重新开始玩游戏,菜单也会直接带你回家? @Wain 我有大约 9 种不同的游戏状态,例如 kGameStateSelectCharacterkGameStateInGame 等。发生这种情况时,它始终是属于 else 的 7 种游戏状态之一上面的类别。我所说的“无论如何”是指游戏状态不是kGameStateMainMenu 小心。我的游戏被 Apple 拒绝了,因为我使用菜单的方式与 Apple 预期的不同 @Stefan 实际上,我的游戏在当前状态下已经被接受了。不过我已经提交了错误报告。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于覆盖 Siri 远程菜单按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 Siri Remote 播放/暂停按钮和覆盖菜单按钮

当 UIButton 获得焦点时,Siri Remote 的菜单按钮不退出应用程序

Siri 远程触摸位置?

如何检测是不是从 Apple TV Siri Remote 中单击了 Siri 按钮

在 SwiftUI 中检测 Siri 远程滑动

win10远程桌面连接不上 这个解决办法也太全面了