tvOS UIPress 手势在 SKScene 的子类中未被识别

tvOS UIPress gestures not being recognized in subclass of SKScene

我正在尝试在 SKScene 的子class 中回复新闻。我可以覆盖我的 ViewController 内的响应程序 pressesEnded 就好了,但是当我将我的 pressesEnded 覆盖移动到我的 SKScene 子 class 时,我不再收到任何电话。

下面是我的 pressesEnabled 覆盖,它在 ViewController

中按预期工作
override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
    print("press")
}

有人知道如何在 SKScene 中接收按钮按下吗?

您需要将您的新闻事件从 ViewController 转发到 SKScene,就像这样...

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {   
  gameScene.pressesBegan(presses, withEvent: event)
}

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
  gameScene.pressesEnded(presses, withEvent: event)
}

然后在 gameScene (SKScene) 中执行如下操作:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
  for press in presses {
    switch press.type {
    case .UpArrow:
      print("Up Arrow")
    case .DownArrow:
      print("Down arrow")
    case .LeftArrow:
      print("Left arrow")
    case .RightArrow:
      print("Right arrow")
    case .Select:
      print("Select")
    case .Menu:
      print("Menu")
    case .PlayPause:
      print("Play/Pause")
    }
  }
}

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
  print("Presses Ended.")
}

当用户点击触摸板的边缘时发送 "Arrow" 次按压,但在模拟器中无法识别。 "Select" 在触摸板中心被点击时发送。

希望对您有所帮助!

使用 pressesBegan 映射物理按钮(菜单、播放暂停),并使用 pressesBeganpressesEnded 映射 Apple TV Remote 的触控板(左、右等)。 如果你按下触控板的 "button" 并移动到另一个位置并释放,方法 pressesEnded 不会被调用,你不能用物理按钮做到这一点。

印刷开始:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
        print("Press began")
        for item in presses {
            if item.type == .PlayPause {
                    print("PlayPause")
            }
        }
}

印刷结束:

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
        print("Press Ended")
        for item in presses {
            if item.type == .RightArrow {
                print("Right Arrow")
            }
        }
    }