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

Posted

技术标签:

【中文标题】如何区分 Siri Remote 按钮按下和游戏手柄按钮按下?【英文标题】:How to tell Siri Remote button presses and gamepad button presses apart? 【发布时间】:2020-06-03 00:14:04 【问题描述】:

我在我的 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 上的“菜单”按钮时,它正确地看到了 press.type 设置为 .menuUIPress

但是,当我在连接到 Apple TV 的 DualShock 4 游戏手柄上按下“圆圈”(buttonB) 时,它会收到 .menu 按下事件。这是正常的吗?它是记录在案的行为吗? (我认为这个想法是让应用程序可以通过游戏手柄“自动”导航。)

我并不总是希望“游戏手柄上的 B”和“遥控器上的 MENU”做同样的事情。我如何区分这两种情况? UIPressesEventUIPress 似乎都没有在其字段中携带任何关于哪个设备发起按键的信息。还有其他方法吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何区分 Siri Remote 按钮按下和游戏手柄按钮按下?的主要内容,如果未能解决你的问题,请参考以下文章

检测 Siri Remote 上的音量和 Home 键按下情况

如何访问 Siri Remote 播放/暂停按钮和覆盖菜单按钮

当 UIButton 获得焦点时,Siri Remote 的菜单按钮不退出应用程序

如何检测是不是从 Apple TV Siri Remote 中单击了 Siri 按钮

无法拦截 Siri Remote 上的“暂停”按钮 - 始终停止背景音乐并且从不继续播放

覆盖 Siri 远程菜单按钮