2016-12-24 3 views
0

Ich habe controllerA, füge ich einige UIView Unterklasse hinzu. Diese Ansicht hat eine long press gesture drin, also wenn Sie es lange drücken, delegieren Sie es an controllerA darüber.Abbrechen der aktuellen langen Geste zum Ziehen einer Ansicht?

Jetzt, während Benutzer lange diese Ansicht gedrückt wird, möchte ich beginnen, es (in controllerA) von panGesture ziehen, die ich zu controllerA hinzugefügt habe.

Das einzige Problem ist, dass der Strom lange drücken auf dieser Ansicht (innerhalb seiner Klasse), ist die Pfanne Geste von controllerA zu beseitigen. (Ich kann es nur ziehen, wenn ich meinen Finger entfernen)

Doing :

view.userInteractionEnable=false 

nach der lange Presse started- nicht berührt abzubrechen und mir ziehen lassen, und ich kann meinen Finger entferne nicht einen Weg finden, die aktuelle Geste zu annullieren, wenn ich nicht.

Antwort

0

Ich fand eine viel einfachere Strategie aus. Wenn Sie ein Element ziehen möchten, während Sie lange drücken, müssen Sie die Schwenkgeste nicht verwenden.

Sie können einfach lange drücken eingestellt und setzen allowableMovement zu etwas Großem, dann übersetzen Sie die Bewegung auf die Achse Ihrer Ansicht des:

let long:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.long)) 
     long.allowableMovement=3000 
     view.addGestureRecognizer(long) 

Dann übersetzen Sie die Koordinaten mit:

 let point = obj.location(in: view.superview) 
    if(action == "began"){draggedPoint = point} //save starting point 
    if(action == "changed") 
    { 
     view.frame.origin.x+=point.x-draggedPoint.x //translate to our view and drag 
     view.frame.origin.y+=point.y-draggedPoint.y 
     isDragging=true 
    } 

Also da die Bewegung ist die Entfernung von der linken Ecke der Ansicht beim Start, speichern Sie einfach diesen Punkt, wenn wir beginnen drücken, und dann messen Sie die Entfernung, und bewegen Sie einfach Ihre Ansicht.

Funktioniert gut.

1

Wenn ich Sie richtig verstehe, verwenden Sie diese Funktion und zurück benötigt Zustand für Ihren Recognizer:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
return true 
} 
+0

Danke, also habe ich versucht, dies zu beiden Klassen hinzuzufügen, aber es hat nicht funktioniert. Ich denke, dass das Problem ist, dass die obere Ansicht keine Berührungen bekommt, die ihm von der Unteransicht genommen werden (lange Presse) – Curnelious

Verwandte Themen