覆盖 Siri 远程菜单按钮
Overriding Siri Remote Menu Button
好的,我正在为 tvOS 制作游戏,并且我已经覆盖了菜单按钮。基本上,如果您在游戏中并按下菜单按钮,您将被带到主菜单。如果您在主菜单并按下菜单按钮,您将 return 到 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 主屏幕并返回到该应用程序(没有退出),那么无论如何,按下菜单按钮都会将您带回到苹果电视主屏幕。
更奇怪的是,调用上面的方法,竟然会运行 quitGame
方法。它不会调用 [super pressesBegan:presses withEvent:event]
,至少在上面的方法中不会,但它仍然会将用户带到主屏幕。
这是一个错误,还是我遗漏了什么?
您不能只覆盖 pressesBegan - 您还必须覆盖 pressesEnded;否则它会触发并调用父项的默认行为以退出您的应用程序。
如果您退出到 Apple TV 主屏幕并返回应用程序并按下菜单按钮将带您返回 Apple TV 主屏幕,您可能也覆盖了 'pressesEnded' 委托回顾它的超级,删除 pressesEnded 中的这个超级调用。
好的,我正在为 tvOS 制作游戏,并且我已经覆盖了菜单按钮。基本上,如果您在游戏中并按下菜单按钮,您将被带到主菜单。如果您在主菜单并按下菜单按钮,您将 return 到 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 主屏幕并返回到该应用程序(没有退出),那么无论如何,按下菜单按钮都会将您带回到苹果电视主屏幕。
更奇怪的是,调用上面的方法,竟然会运行 quitGame
方法。它不会调用 [super pressesBegan:presses withEvent:event]
,至少在上面的方法中不会,但它仍然会将用户带到主屏幕。
这是一个错误,还是我遗漏了什么?
您不能只覆盖 pressesBegan - 您还必须覆盖 pressesEnded;否则它会触发并调用父项的默认行为以退出您的应用程序。
如果您退出到 Apple TV 主屏幕并返回应用程序并按下菜单按钮将带您返回 Apple TV 主屏幕,您可能也覆盖了 'pressesEnded' 委托回顾它的超级,删除 pressesEnded 中的这个超级调用。