2009-04-24 13 views
5

Ich möchte das Flick-to-Scroll-Verhalten von UIScrollView reproduzieren, aber ich möchte diese Klasse nicht verwenden (oder nicht verwenden). Was kann ich tun?Wie kann ich das Scroll-Verhalten des iPhone UIScrollView in meiner eigenen benutzerdefinierten Ansicht reproduzieren?

+0

Hinweis: Die Frage bezog sich auf eine OpenGL-Ansicht – Thanks

+0

Wahr, in _my_ Fall dachte ich über OpenGL-Ansichten. Siehe unten meine Antwort auf Roger Nolan - ich denke, es gibt auch viele interessante Nicht-OGL-Fälle. –

Antwort

8

Okay, ich habe das beantwortet, indem ich meine eigene Bibliothek implementiert habe, die die Dynamik von UIScrollView erfasst.

Was an meinem Code nützlich ist, ist, dass er unabhängig vom Koordinatensystem, der Animationsrate und den von Ihnen verwendeten UI-Klassen ist. Es kann leicht in einer benutzerdefinierten Ansichtsklasse Ihrer Wahl verschachtelt werden.

Das standardmäßige Flick-to-Scroll-Verhalten des iPhone ist interessant. Wenn Sie Ihren Finger lange gedrückt halten und ihn in verschiedene Richtungen bewegen, werden Sie feststellen, dass nur die allerletzte Richtung zur Berechnung der Bildlaufbewegung verwendet wird.

Wenn Sie jedoch versuchen, diesen Code selbst zu erstellen, werden Sie schnell feststellen, dass die Verwendung der letzten beiden Punkte zur Berechnung der Bewegungsrichtung nicht ausreicht, um den Code zu schneiden. Stattdessen behält mein Code eine kurze Historie von Berührungen bei und verwendet lineare Interpolation, um zu bestimmen, wo die Berührung vor einiger Zeit gewesen wäre. Dieser interpolierte Punkt wird als Grundlage für die Berechnung des Bewegungsvektors verwendet. Dies führt zu einer sehr angenehmen Interaktion.

Der Code ist auf GitHub verfügbar, hier: http://gist.github.com/100855. Es wird unter der BSD-Lizenz veröffentlicht.

+0

Sie haben innerhalb von 2 Minuten nach Ihrer Frage Ihre eigene Frage beantwortet - mit einem ziemlich komplizierten Code? Es ist interessanter Code, also OK! –

+0

Ja, ich wusste nicht, ob das für Stack Overflow koscher war, aber seit ich entdeckt habe, dass ich nicht der Einzige bin, der danach sucht, dachte ich, es wäre hilfreich? Gibt es ein besseres Forum? –

0

Also, was ist mit UIScrollView hat nicht für Sie arbeiten? Diese Klasse ist ziemlich flexibel ...

+0

Ich habe eine OpenGL-Ansicht für ein Spiel und ich wollte in der Lage sein, das Ansichtsfenster ähnlich wie bei UIScrollView zu steuern ... –

0

Dave, ich sehe dich answerd Ihre eigene Frage mit einigen Code haben, aber nicht Einstellung nicht der Sie folgende geben, was Sie brauchen:

myScrollView.bounces = YES; 
myScrollView.pagingEnabled = YES; 
myScrollView.directionalLockEnabled = YES; 

, besonders es klingt, als ob Sie directionLockEnabled erneut implementiert haben. Vielleicht zu verstehen, warum Sie UIScrollView nicht verwenden können, ist das interessantere Problem :-)

+0

Siehe oben meinen Kommentar. Ich versuche, das Verhalten in einem Kontext zu reproduzieren, in dem UIScrollView nicht gehen kann (oder zumindest nicht gehen sollte.) –

+0

(Und: Ich sollte darauf hinweisen, dass das, was ich getan habe, NICHT das Gleiche ist, als nur ein paar Eigenschaften zu setzen in einer Scroll-Ansicht, wenn ich das hätte tun müssen - nun, ich hätte es getan :-) –

+0

... und ich bin interessiert, was das ist ;-) –

0

Das ist cool! Ich habe es in einer App verwendet, wo meine scrollbare Ansicht grafische Daten eines Tages in einem Bereich von 1902-2037 enthält, so dass ein UIScrollView nicht effizient wäre.

Verwandte Themen