2016-04-20 5 views
0

beendet Ich habe den folgenden Code, der eine UIView schleppt. Alles funktioniert gut visuell.Ziehen UIView verliert die Geste, wenn

func moveView(sender: UIPanGestureRecognizer) { 
     let translate = sender.translationInView(self.view) 
     if sender.state == UIGestureRecognizerState.Changed { 
      sender.view!.center = CGPoint(x:sender.view!.center.x + translate.x, y:sender.view!.center.y + translate.y) 
      sender.setTranslation(CGPointZero, inView: self.view) 
     } 
     if sender.state == UIGestureRecognizerState.Ended { 
      let newX: CGFloat = sender.view!.center.x + translate.x 
      let newY: CGFloat = sender.view!.center.y + translate.y 
      sender.view!.center = CGPoint(x:newX, y:newY) 
     } 
} 

jedoch nach diesem drag Abschluss scheint die Ansicht, die die Geste Verbindung zu verlieren, so dass ich es nicht wieder ziehen oder eine Tippgeste mit ihrem verbundenen auslösen usw.

Wenn ich ein NSLog mich hinzufügen kann sehen, dass Klopfen, wo die Ansicht verwendet, um die Log löst aber nicht, wenn ich auf dem tatsächlichen aktuellen Ansicht Standort tippen.

ich die Geste etablieren innerhalb viewDidLoad mit folgendem zu sehen thisView

let moveGesture = UIPanGestureRecognizer(target: self, action: Selector("moveView:")) 
thisView.addGestureRecognizer(moveGesture) 

Was mir fehlt, dass die Gesten hält an der neuen Ansicht Standort verbunden?

Danke.

Antwort

1

Ich denke, dass, wenn Sie diesen sender.setTranslation(CGPointZero, inView: self.view) vielleicht nennen sollen Sie die Übersetzung in Bezug auf die Ansicht selbst zu Superview und nicht. Einstellen der Übersetzung in Bezug auf sich selbst, die Position der Ansicht Inhalt, nicht aber die Sichtbereich, was bedeutet, dass, wenn Sie die View-Schicht auf seine Grenzen zu verschleiern sollten Sie nichts sehen, dass es außerhalb der Ansicht Anfangsbereich ist.
So sollten Sie sender.setTranslation(CGPointZero, inView: self.view.superview) tun.

+0

Ein sehr wichtigen Punkt in der Tat - vielen Dank. Dies scheint geholfen zu haben. Ich habe ein anderes Problem mit dem Ziehen gefunden, das die Ansicht hinter einem anderen Element positioniert, aber das ist ein anderes Problem, das behoben werden muss. – RobertyBob