4 Stimmen

Maßeinheiten / Dimensionen für UIScrollView DecelerationRate und Geschwindigkeit?

Ich versuche, die Geschwindigkeit eines scrollenden UIScrollView zu erhalten, nachdem der Benutzer seinen Finger angehoben hat, damit ich ein Ereignis auslösen kann, wenn die Geschwindigkeit des Scrollviews unter eine Schwellenwert-Geschwindigkeit fällt.

Die Apple-Dokumentation besagt, dass die Einheiten für die Geschwindigkeit eines Scrollviews in Punkten angegeben sind und ich vermute, dass es pro Sekunde (pts/s) sein würde, z.B. für die UIScrollView Delegate-Methode - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset.

Ich würde daher annehmen, dass die Einheiten für die Deceleration eines Scrollviews Punkte pro Sekunde pro Sekunde (pts/s^2) wären, aber dies scheint nicht der Fall zu sein.

Hier sind einige Beispielparameter, die aus einem scrollenden Scrollview genommen wurden, sobald das Pan-Gesture-Ereignis endet (d.h. sobald Sie Ihren Finger anheben), die aus den Methoden - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset und - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView stammen:

(Anfangsversatz, Zielpersatz, Anfangsgeschwindigkeit, Endgeschwindigkeit, Verzögerung, Verstrichene Zeit) =

  • (364,0, 2664,5, 4,619940, 0, 0,998, 3,068916)
  • (2595,5, 3288,5, 1,398724, 0, 0,998, 2,485449)
  • (3094,5, 1907,0, -2,389578, 0, 0,998, 2,752163)
  • (143,0, 1275,5, 2,279252, 0, 0,998, 2,718653)

wo:

  • Anfangsversatz = scrollView.contentOffset.y sobald der Finger angehoben wird
  • Zielpersatz = targetContentOffset->y sobald der Finger angehoben wird oder scrollView.contentOffset.y wenn das Scrollview mit der Verzögerung fertig ist
  • Anfangsgeschwindigkeit = Geschwindigkeit.y sobald der Finger angehoben wird
  • Endgeschwindigkeit = 0, weil das Scrollview scrollen lassen wird, bis es natürlich stoppt
  • Verzögerung = scrollView.decelerationRate sobald der Finger angehoben wird
  • Verstrichene Zeit = Zeit zwischen dem Anheben des Fingers und dem Ruhen des Scrollviews

4voto

matt Punkte 481428

Der wichtigste Delegatenmethode für Ihren Zweck ist wahrscheinlich scrollViewDidScroll:, da Sie diese Nachricht immer wieder erhalten, auch während der Verzögerung. Das Überwachen dessen, was passiert, wird für Sie nützlicher sein, als im Voraus zu berechnen. Es gibt keine nützlichen "Einheiten für die Verzögerung eines Scrollviews" - das heißt, Sie haben keine Informationen, die es Ihnen ermöglichen würden, im Voraus eine Geschwindigkeit zu berechnen, zu jedem Moment während der Verzögerung. Allerdings sagt Ihnen scrollViewWillEndDragging:withVelocity:targetContentOffset: jetzt die Geschwindigkeit und den Versatz, den das Scroll-View haben wird, wenn die Geschwindigkeit null ist, und Sie können jetzt nach dem Versatz fragen, sodass Sie einen Versatz zwischen dem aktuellen Versatz und dem Endversatz festlegen können, und den Rest des Scrollens überwachen können, während es in scrollViewDidScroll: fortgesetzt wird, um zu lernen, wann dieser Versatz passiert ist. Und selbstverständlich können Sie jedes Mal, wenn scrollViewDidScroll: aufgerufen wird, einen Zeitstempel nehmen, sodass Sie mit diesem und dem momentanen Versatz sowie dem Aufzeichnungen aus allen vorherigen Aufrufen, presto, Ihre momentane Geschwindigkeit erhalten.

0voto

Andrey M. Punkte 2685

Geschwindigkeitseinheiten des UIScrollView werden in pt/ms gemessen, während Geschwindigkeitseinheiten des UIPanGestureRecognizer in pt/s gemessen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X