Frage

Ich habe eine App mit einer draggierbaren UIView unten. Die draggierbare Ansicht ist nicht vollständig außerhalb des Bildschirms und hat eine "Pull -Tab", die der Benutzer nach oben oder nach unten ziehen kann. Derzeit funktioniert das Ziehen auf und ab, aber ich möchte ihm das gleiche Verhalten wie die Apple -Benachrichtigungen verleihen.

Wenn ich beispielsweise die Ansicht 50% nach oben ziehe und meinen Finger vom Bildschirm entziehe, möchte ich, dass die draggable Ansicht sich selbst weiter nach oben bewegt. Wenn der Benutzer die Ansicht nur herausgezogen hat, beispielsweise 30% nach oben, sollte die Ansicht wieder in die Standardposition fallen.

Im Idealfall ist die Bewegung nicht sehr "organisch".

Im Moment verwende ich das nach oben und unten nach oben und nach unten stehende Ziehen, nur für den Fall, dass dies für die Frage relevant ist.

Ist es vielleicht etwas im Sinne einer cleveren Mathematik mit der y -Position der draggierbaren Ansicht und dann den Rest des Bewegungen mit einigen Caanimations?

Es ist möglicherweise etwas schwierig, sich zu visualisieren, also habe ich unten einige Bildschirme hinzugefügt.

Standardbildschirm mit der A -Ansicht unten

Die Ansicht wurde über die Registerkarte rechts gezogen

Vielen Dank!

War es hilfreich?

Lösung

Wenn dein UIPanGestureRecognizerDer Zustand wird UIGestureRecognizerStateEnded, benutze die velocityInView: Nachricht, um die Geschwindigkeit der Geste zu finden.

Wenn die Geschwindigkeit nahe Null liegt, öffnen oder schließen Sie die Ansicht basierend auf der Position der Ansicht und dem vorherigen Stand der Ansicht. Wenn die Aussicht beispielsweise geschlossen wurde und mehr als 10%herausgezogen wurde, öffnen Sie sie. Wenn es geöffnet war und mehr als 10%eingezogen wurde, schließen Sie es. Bewegen Sie es ansonsten zurück in seine Position vor der Übersteuerung.

Wenn die Geschwindigkeit nicht nahe bei Null ist, verwenden Sie das Vorzeichen der Y -Komponente, um den neuen Stand der Ansicht zu bestimmen. Wenn das Zeichen positiv ist, schließen Sie die Ansicht. Wenn das Zeichen negativ ist, öffnen Sie die Ansicht.

Sie müssen experimentieren, um genau herauszufinden, welche Definition von „nahe Null“ am besten anfühlt.

In jedem Fall möchten Sie die Sicht auf seine endgültige Position nach dem Ende der Geste unter Verwendung einer kurzen Dauer (wahrscheinlich zwischen 0,1 und 0,25 Sekunden) animieren. Möglicherweise möchten Sie die Dauer basierend auf der Geschwindigkeit und der Entfernung, die die Aussicht nötig ist, wählen. Das System -Benachrichtigungsfeld tut dies. (Versuchen Sie, es langsam im Vergleich zu schnell nach unten zu ziehen. Es wird mit unterschiedlichen Geschwindigkeiten in seine endgültige Position animiert, je nachdem, wie schnell Sie es beim Loslassen gezogen haben.)

Sie möchten experimentieren, um die beste Animationskurve zu finden (UIViewAnimationOptionCurveEaseOut, usw.), und Sie möchten möglicherweise eine andere Kurve verwenden, je nachdem, ob Sie die Ansicht und die Geschwindigkeit der Geste öffnen oder schließen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top