无法识别的选择器已发送到实例Sprite Kit

问题描述

我被著名的“无法识别的选择器发送给实例”震惊。完整的错误

-[MyGame.GameScene handlePanFrom:]:无法识别的选择器已发送到实例0x103c05fe0

所指功能是她在游戏场景中的作用:

    func handlePanFrom(recognizer: UIPanGestureRecognizer) {
    if recognizer.state == .began {
        var touchLocation = recognizer.location(in: recognizer.view)
        touchLocation = self.convertPoint(fromView: touchLocation)

        self.selectNodeForTouch(touchLocation: touchLocation)
    } else if recognizer.state == .changed {
        var translation = recognizer.translation(in: recognizer.view!)
    translation = CGPoint(x: translation.x,y: -translation.y)

        self.panForTranslation(translation: translation)

        recognizer.setTranslation(CGPoint.zero,in: recognizer.view)
    } else if recognizer.state == .ended {
    if selectedplayer.name != kAnimalNodeName {
      let scrollDuration = 0.2
        let veLocity = recognizer.veLocity(in: recognizer.view)
      let pos = selectedplayer.position

      // This just multiplies your veLocity with the scroll duration.
      let p = CGPoint(x: veLocity.x * CGFloat(scrollDuration),y: veLocity.y * CGFloat(scrollDuration))

      var newPos = CGPoint(x: pos.x + p.x,y: pos.y + p.y)
        newPos = self.boundLayerPos(aNewPosition: newPos)
      selectedplayer.removeAllActions()

        let moveto = SKAction.move(to: newPos,duration: scrollDuration)
        moveto.timingMode = .eaSEOut
        selectedplayer.run(moveto)
    }
  }
}

然后,游戏场景中的这段代码确实具有移动功能

    let gestureRecognizer = UIPanGestureRecognizer(target: self,action: Selector(("handlePanFrom:")))
    self.view!.addGestureRecognizer(gestureRecognizer)

如果您需要查看我将提供的其他任何代码

还应注意,我在GameViewController中更改了一些代码,但我不知道这是否与它有关。

解决方法

尝试使用#selector语法,如下所示:

let gestureRecognizer = UIPanGestureRecognizer( target: self,action: #selector(handlePanFrom(recognizer:)) )

并将方法标记为@objc

@objc func handlePanFrom(recognizer: UIPanGestureRecognizer) {
    print("Pan !")
}