tvos swift spritekit - UITapGestureRecognizer 没有响应

Posted

技术标签:

【中文标题】tvos swift spritekit - UITapGestureRecognizer 没有响应【英文标题】:tvos swift spritekit - UITapGestureRecognizer not responding 【发布时间】:2016-11-11 20:22:52 【问题描述】:

我根本无法让这个手势做出回应。

    self.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(self.movePlayer(_:)))
    tap.allowedPressTypes = [NSNumber(value: UIPressType.playPause.rawValue)]
    view?.addGestureRecognizer(tap)

和功能:

func movePlayer(_ sender: UITapGestureRecognizer)
    player.run(SKAction.moveBy(x: 200, y: 0, duration: 10))
    print("Right!")

按下模拟器遥控器上的播放按钮时什么也没有发生。我错过了什么?

【问题讨论】:

您在点击时是否点击了选项? (我认为是选项,它会在模拟器遥控器上说) 【参考方案1】:

点击手势识别器代码看起来不错。你在哪里加的,是在didMoveToView里面吗?

我最近在玩新的 ios 10

override func sceneDidLoad()  

方法,我注意到那里添加的手势识别器不起作用。

这在模拟器中有效

 class GameScene: SKScene, SKPhysicsContactDelegate 

      override func didMove(to view: SKView) 

          self.isUserInteractionEnabled = true
          let tap = UITapGestureRecognizer(target: self, action: #selector(self.movePlayer(_:)))
          tap.allowedPressTypes = [NSNumber(value: UIPressType.playPause.rawValue)]
          view.addGestureRecognizer(tap)
     

     func movePlayer(_ sender: UITapGestureRecognizer)
         print("Right!")

     
 

希望对你有帮助

【讨论】:

....是的,它在 sceneDidLoad() 函数中。我尝试将其移至 didMove,但仍然无法正常工作。 手势需要 didMove,我记得用 sceneDidLoad 测试过,但它不起作用。我刚刚用一个新项目对此进行了测试,它运行良好。你能用你场景的整个代码更新你的问题吗? 好吧,我尝试在一个新项目中对其进行测试,现在它可以工作了。将我的代码移动到 didMove 确实有效。我还将精灵放置移动到 didMove ,它修复了另一个错误,它创建了一个移动的精灵副本。那么,sceneDidLoad 是不是很糟糕? 嘿,是的,sceneDidLoad 很奇怪,我猜它在 didMoveToView 之前被调用,这就是识别器不起作用的原因。感谢您的标记。快乐编码

以上是关于tvos swift spritekit - UITapGestureRecognizer 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

TVOS 10 SpriteKit 焦点导航默认焦点项目

Swift UI笔记

是否可以使用SpriteKit在应用程序上使用Xcode UI Testing?

tvOS 中的一种方式 Segue

如何在 SpriteKit 中创建图像节点?斯威夫特 4

Sprite Kit 游戏在 tvOS 9.1 和 iOS 9.2 上的 Game Over 中崩溃