如何区分 Siri 远程按钮按下和游戏手柄按钮按下?
How to tell Siri Remote button presses and gamepad button presses apart?
我在 ViewController 上写了 pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?)
的覆盖。
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
}
当我按下 Siri Remote 上的“菜单”按钮时,它正确地看到 UIPress
press.type
设置为 .menu
。
但是,当我在 DualShock 4 游戏手柄上按下“圆圈”(buttonB
) 时,它 也 得到一个 .menu
按下事件连接到我的 Apple TV。这是正常的吗?它是记录在案的行为吗? (我假设这个想法是让应用程序可以使用游戏手柄“自动”导航。)
我并不总是希望“手柄上的 B”和“遥控器上的菜单”做同样的事情。我怎样才能区分这两种情况? UIPressesEvent
和 UIPress
似乎都没有在它们的字段中携带任何关于哪个设备发起按键的信息。还有其他方法吗?
我最终改变了我的 ViewController 情况,以便在我不希望 B 按钮执行导航时显示 GCEventViewController。然后我使用 GameController
提供的工具来处理游戏手柄按下,pressesBegan
似乎不再由 B 按钮触发。
我在 ViewController 上写了 pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?)
的覆盖。
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
}
当我按下 Siri Remote 上的“菜单”按钮时,它正确地看到 UIPress
press.type
设置为 .menu
。
但是,当我在 DualShock 4 游戏手柄上按下“圆圈”(buttonB
) 时,它 也 得到一个 .menu
按下事件连接到我的 Apple TV。这是正常的吗?它是记录在案的行为吗? (我假设这个想法是让应用程序可以使用游戏手柄“自动”导航。)
我并不总是希望“手柄上的 B”和“遥控器上的菜单”做同样的事情。我怎样才能区分这两种情况? UIPressesEvent
和 UIPress
似乎都没有在它们的字段中携带任何关于哪个设备发起按键的信息。还有其他方法吗?
我最终改变了我的 ViewController 情况,以便在我不希望 B 按钮执行导航时显示 GCEventViewController。然后我使用 GameController
提供的工具来处理游戏手柄按下,pressesBegan
似乎不再由 B 按钮触发。