Ich benutze PanGesture Recognizer in Swift für iOS. Innerhalb der Aktionsmethode rufe ich die Methode eines Drittanbieters auf, die Bewegungsrichtung und Geschwindigkeit annimmt. Daraus berechnet er Position des Objekts:Swift - PanGesture Recognizer - Bewegung mit Objekt - Bewegungsgeschwindigkeit
objectPos += normalize(move) * speed
Problem ist, dass, wenn ich mit dem Finger auf ein bestimmtes Objekt setzen und mit den Fingern bewegen, Objekte nicht an der gleichen Position unter meinem Finger ist. Es beginnt sich langsamer/schneller zu bewegen. Bewegungsrichtungen sind in Ordnung. Problem ist mit Beschleunigung/Verzögerung - wenn ich mich schneller bewege, bewegen sich Objekte schneller.
In Geste Rückruf Ich habe versucht:
let move = recognizer.translation(in: self.view);
let speed = sqrt((move.x * move.x) + (move.y * move.y));
und
let move = recognizer.velocity(in: self.view);
let speed = dt * sqrt((move.x * move.x) + (move.y * move.y));
Normalerweise dt = 1.0/60.0
. Es ist die Gesten-Callback-Aktualisierungsrate (im Code berechne ich dt manuell unter Verwendung der Differenz von CFAbsoluteTimeGetCurrent()
). Ohne dies, wenn ich die Geschwindigkeit direkt zur Berechnung der Geschwindigkeit verwende, ist die Bewegung zu schnell.
Ich habe versucht, Differenz manuell durch Subtrahieren der aktuellen und letzten Position zu berechnen, aber immer noch kein Glück.
Ich habe auch versucht, "Geschwindigkeit ändern" nach aktuellen Ansicht Breite und Höhe, aber keine ot wenn gearbeitet. Ich vermisse wahrscheinlich etwas, aber weiß nicht was.
Ich kann dies nicht tun, weil die 3rd-Party-Bibliothek, die ich verwende, es nicht unterstützt. –
Ich stimme dieser Antwort zu, können Sie keinen Wert senden, um die Geschwindigkeit zu neutralisieren, solange der Benutzer die Berührung hat? wie Einstellung dt 1.0 statt 1.0/60.0 –
welche Bibliothek Sie verwenden? – muescha