【问题标题】:UITapGestureRecognizer not picking up inputs on tvOSUITapGestureRecognizer 没有在 tvOS 上接收输入
【发布时间】:2021-11-22 17:54:33
【问题描述】:

我正在为 tvOS 开发一款小型 SpriteKit 游戏。当用户单击遥控器上的播放/暂停按钮时,我需要接收输入。查看docs,看来我应该只需要在我的场景视图中添加一个UITapGestureRecognizer。我实现了以下代码:

override func didMove(to view: SKView) {
    let tapPlayPause = UITapGestureRecognizer(target: self, action: #selector(tapTesting))
    tapPlayPause.allowedPressTypes = [NSNumber(value: UIPress.PressType.playPause.rawValue)]
    view.addGestureRecognizer(tapPlayPause)

    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(swipeUp))
    swipeUp.direction = .up
    view.addGestureRecognizer(swipeUp)
}

@objc func tapTesting(_ sender: UITapGestureRecognizer) {
    print("TAP")
}

但是,当我在 Apple TV 4K(运行 tvOS 15)上运行应用程序时,没有输出,据我所知,没有触发任何点击代码。

我也尝试了self.isUserInteractionEnabled = true 的代码,但我仍然没有收到点击输入。

我在上面实现的滑动手势非常完美,而点击手势也适用于我的 iOS 设备。有没有人知道为什么会这样?

谢谢!

【问题讨论】:

  • 什么时候点击视图控制器的视图或其他什么?切换到游戏场景后?如果是这种情况,则无法访问视图控制器的视图。
  • @El Tomato,只是好奇水龙头的处理方式与滑动方式不同吗?如果没有,为什么滑动而不是点击会起作用?谢谢。
  • 我无法回答。而且我什至不知道你在哪个类下编写这些代码。
  • 它在我的 GameScene(它只是 SKScene 的一个子类)中,我通过 SwiftUI SpriteView 加载它。此外,如果视图控制器的视图不可访问,这不会在 iOS 上导致与 tvOS 相同的问题吗?只是好奇,因为 UITapGestureRecognizers 在 iOS 设备上按预期工作。如果我可以发布任何有用的额外代码/信息,请告诉我。
  • 您不能将UITapGestureRecognizerSKScene 一起使用。使用轻击手势与在SKScene 上使用 UIButton 几乎相同。如果您想进行点击操作,请改用UIEvent,如UITouch。并且不要在SKScene 上使用UIButton。我们改用SKNode

标签: ios swift sprite-kit tvos


【解决方案1】:

对于 tvOS 手势,您还需要将 allowedTouchTypes 设置为 .indirect

tapPlayPause.allowedTouchTypes = [NSNumber(touchType: .indirect)]

【讨论】:

  • 很遗憾,我仍然有这个问题。我尝试明确设置它:tapPlayPause.allowedTouchTypes = [NSNumber(value: UITouch.TouchType.indirect.rawValue)],但根据文档“此属性的默认值包含所有触摸类型”。那么这真的会有所作为吗?此外,这听起来像是用于触摸而不是按下按钮。感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多