私は同じクラスのMovableBlock
という3つのノードlineBlock
を持っています。誰かが画面に触れているlineBlock
ノードを回転させたいです。UIRotationRecognizer(SpriteKit + Swift 3.0)内のタッチされたノードを見つける方法
私はtouchedMovedに正しいlineBlock
ノードを移動するため、これを解決してきました:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
touch = touches.first!
positionInScene = self.touch?.location(in: self)
let previousPosition = self.touch?.previousLocation(in: self)
let translation = CGVector(dx: (positionInScene?.x)! - (previousPosition?.x)!, dy: (positionInScene?.y)! - (previousPosition?.y)!)
if touchedNode?.name?.contains("LineBlock") == true {
(touchedNode as! MovableBlock).selected = true
(touchedNode as! MovableBlock).parent!.parent!.run(SKAction.move(by: translation, duration: 0.0))
}
}
しかし、私は私のUIRotationRecognizer関数内で同じことを行うことができませんでした。私の回転機能では、それは単純にかかわらず、最初のノードを回転させるのlineBlock(クラスMovableBlockの)私は感動しています:参考
func rotate(_ sender: UIRotationGestureRecognizer){
if lineBlock.selected == true {
lineBlock.run(SKAction.rotate(byAngle: (-(self.rotationRecognizer?.rotation)!*2), duration: 0.0))
rotationRecognizer?.rotation = 0
}
}
、ここで私は(touchBeganで)touchedNodeの定義方法は次のとおりです。
touches: Set<UITouch>, with event: UIEvent?) {
touch = touches.first!
positionInScene = self.touch?.location(in: self)
touchedNode = self.atPoint(positionInScene!)
はtouchedNodeを使用したいが、touchedNodeはtouchBeganまたはtouchMovedの外側ではnilになる – nicolime