如何区分 Siri Remote 按钮按下和游戏手柄按钮按下?

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似乎在他们的领域中携带任何关于哪个设备发起按键的信息。还有其他方法吗?

Lyn*_*ynn 0

我最终改变了 ViewController 的情况,以便每当我不希望 B 按钮执行导航时都会显示GCEventViewController 。然后我使用 提供的工具来GameController处理游戏手柄按下操作,并且pressesBegan似乎不再由 B 按钮触发。