UITapGestureRecognizer 没有在 tvOS 上接收输入

Posted

技术标签:

【中文标题】UITapGestureRecognizer 没有在 tvOS 上接收输入【英文标题】:UITapGestureRecognizer not picking up inputs on 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 【参考方案1】:

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

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

【讨论】:

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

以上是关于UITapGestureRecognizer 没有在 tvOS 上接收输入的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UITapGestureRecognizer 方法没有快速调用 Navigationbar titleView

UITapGestureRecognizer 没有在 tvOS 上接收输入

有没有办法通过 UITapGestureRecognizer 发送对象?

tvos swift spritekit - UITapGestureRecognizer 没有响应

TTTAttributedLabel 链接已设置样式并具有 UILongPressGestureRecognizer 但没有 UITapGestureRecognizer

尝试添加 UITapGestureRecognizer 但不工作