swift - 如何区分 Siri Remote 按钮按下和游戏 handle 按钮按下?

标签 swift tvos apple-tv gamepad 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
  }

它正确地看到了 UIPresspress.type设置为 .menu当我按下 Siri Remote 上的“菜单”按钮时。

然而,它也会得到一个 .menu当我在连接到 Apple TV 的 DualShock 4 游戏 handle 上按下“圆圈”(buttonB)时按下事件。这是正常的吗?它是记录在案的行为吗? (我认为这个想法是让应用程序“自动”使用游戏 handle 进行导航。)

我并不总是希望“游戏 handle 上的 B”和“ Remote 上的菜单”做同样的事情。我如何区分这两种情况?都没有 UIPressesEvent也不是 UIPress似乎在他们的领域中携带任何关于哪个设备发起按键的信息。还有其他方法吗?

最佳答案

我最终改变了我的 ViewController 情况,所以我提出了一个 GCEventViewController每当我不希望 B 按钮执行导航时。然后我使用 GameController 提供的工具处理游戏 handle 按压和 pressesBegan似乎不再由 B 按钮触发。

关于swift - 如何区分 Siri Remote 按钮按下和游戏 handle 按钮按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62163288/

相关文章:

ios - 如何解决使用 URL Session 获取数据的问题?

ios - @IBDesignable 不适用于 iOS swift 3

快速处理从 sleep 中唤醒并恢复播放?

youtube - 如何在 tvOS 上播放 YouTube 内容

tvos - 无法通过 Apple Configurator 2 在 Apple TV 上安装 Charles Proxy 配置文件

ios - iCloud:在 iOS 和 tvOS 之间同步键值存储

ios - 如何在 tvOS 上显示 GameCenter 排行榜?

swift - 如何检测在 Swift 3 中可见的 UITouch 位置

swift - 如何将 float3 转换为 SIMD3<Float>(Xcode 11 Swift 5 使用 float3 和 float4 给出折旧警告)

swift - 错误域=AVFoundationErrorDomain 代码=-11835 "Cannot Open"