2016-11-26 2 views
1

У меня есть три узла lineBlock того же класса MovableBlock на экране. Я хочу повернуть узел lineBlock, который кто-то касается экрана.Как найти затронутый узел в UIRotationRecognizer (SpriteKit + Swift 3.0)

Я решил это для перемещения правильного lineBlock узла в touchedMoved:

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 
     } 
    } 

Для справки, вот как я определяю touchedNode (в touchBegan):

touches: Set<UITouch>, with event: UIEvent?) { 
    touch = touches.first! 
    positionInScene = self.touch?.location(in: self) 
    touchedNode = self.atPoint(positionInScene!) 
+0

хотел бы использовать touchedNode, но touchedNode становится ноль вне touchBegan или touchMoved – nicolime

ответ

1

UIGestureRecognizer s есть метод location(in:UIView). Вы можете использовать self.view?.convert(sender.location(in: self.view), to: self), чтобы получить местоположение UIRotationGestureRecognizer и использовать логику, аналогичную логике touchesBegan.

convert(_:to:) будет следить за тем, чтобы точка находилась в координатном пространстве вашей сцены.

Смежные вопросы