Lyn*_*ynn 10 apple-tv gamepad swift tvos siri-remote
我pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?)
在我的 ViewController 上写了一个覆盖。
open override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
#if os(tvOS)
for press in presses {
switch press.type {
case .menu: print("menu"); break;
case .select: print("select"); break;
case .playPause: print("playPause"); break;
default: break;
}
}
#endif
}
Run Code Online (Sandbox Code Playgroud)
当我按下 Siri Remote 上的“菜单”按钮时UIPress
,它会正确地看到已press.type
设置为.menu
。
但是,当我在已连接到 Apple TV 的 DualShock 4 游戏手柄上按“圆圈”( )时,它也会收到一个.menu
新闻事件buttonB
。这是正常的吗?它是记录在案的行为吗?(我认为这个想法是让应用程序“自动”使用游戏手柄进行导航。)
我并不总是希望“游戏手柄上的 B”和“遥控器上的菜单”做同样的事情。我如何区分这两种情况?既没有UIPressesEvent
也没有UIPress
似乎在他们的领域中携带任何关于哪个设备发起按键的信息。还有其他方法吗?
我最终改变了 ViewController 的情况,以便每当我不希望 B 按钮执行导航时都会显示GCEventViewController 。然后我使用 提供的工具来GameController
处理游戏手柄按下操作,并且pressesBegan
似乎不再由 B 按钮触发。