【发布时间】: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 设备上按预期工作。如果我可以发布任何有用的额外代码/信息,请告诉我。
-
您不能将
UITapGestureRecognizer与SKScene一起使用。使用轻击手势与在SKScene上使用 UIButton 几乎相同。如果您想进行点击操作,请改用UIEvent,如UITouch。并且不要在SKScene上使用UIButton。我们改用SKNode。
标签: ios swift sprite-kit tvos