2009-04-05 4 views
7

Ich habe ein UIScrollView mit Bildern drin. Wenn der Benutzer das letzte Bild erreicht und den Finger zum nächsten Bild wischt, möchte ich das erste Bild zeigen. Wenn der Benutzer auf dem ersten Bild ist und für das vorherige Bild wischt, möchte ich das letzte Bild anzeigen. Kurz gesagt, es wird eine zirkuläre Art von etwas sein.Rund UIScrollView

Wie kann ich das umsetzen?

Antwort

6

Sie müssen mit Content und Content arbeiten.

Jedes Mal, wenn ein Scroll-Ereignis vorliegt, können Sie prüfen, ob der Benutzer currentLength - 1 verwendet, und wenn dies der Fall ist, dynamisch ein Bild zum Scrollview hinzufügen.

Dies sollte funktionieren, um 5 zu sein, obwohl Sie in Schwierigkeiten in Bezug auf Speicher geraten können, wenn Sie die früheren Bilder nicht freigeben.

ich diese Lösung nicht denke, wird weniger mit Bildern arbeitet als Index 0.

Alternativ ... Lassen Sie sagen Bilder I1 bis I5 haben. Layout eines scrollview mit den folgenden Bildern: I5 I1 I2 I3 I4 I5 I1

Autoscroll zu I1 (Höhe von I5), ohne Animation.

Wenn der Benutzer über diese Markierung scrollt, scrollt er sie (ohne Animation) auf das zweite I5 I1-Paar. Wenn der Benutzer jemals versucht, unterhalb von I5 einen Bildlauf durchzuführen, können Sie ihn automatisch zum ersten I5 I1-Paar zurückscrollen. Wenn Sie ohne Animation und auf die richtige Höhe scrollen, werden die Bilder endlos angezeigt.

Ich bin nicht sicher, ob dies sehr reaktionsschnell sein wird, aber es könnte den Effekt geben, für die Sie suchen.

+0

Das ist ziemlich genau das, was ich in einer meiner Apps gemacht habe. Es funktioniert gut. –

+3

Dies funktioniert nicht, wenn die Bewegung der Ansicht kontinuierlich sein soll. Es sei denn, Sie könnten irgendwo mit einer bestimmten Geschwindigkeit scrollen. – Dimitris

+0

Diese Lösung funktioniert einwandfrei, wenn Paging aktiviert ist. – redent84

2

Der Schlüssel ist daran zu erkennen ist, dass ein UIScrollView sehr intelligent ist, was es neu gezeichnet.

Sie können die Unteransichten verschieben, und solange sich die auf dem Bildschirm sichtbaren Ansichten nicht verschieben oder ändern, erfolgt kein Neuzeichnen. Sie können den Frame aller Offscreen-Untersichten zurücksetzen (und ggf. contentOffset anpassen), ohne eine Neuzeichnung zu verursachen.

Natürlich, das Aktivieren von Paging macht das viel einfacher, aber ich bin mir sicher, dass Sie es auch von didScroll aus tun könnten.

Sie sollten Ihre 5 Ansichten fügen Sie sie als Subviews erzeugen und den Versatz der Bildlaufansicht zu der Mitte der fünf gesetzt. Während der scrollView scrollt, können Sie die Subviews umschalten - wie bei einem Round-Robin. Sie müssen die Unteransichten nicht entfernen und neu hinzufügen. Sie können die Rahmen einfach zurücksetzen.

Dies ist (auf einer einfachen Ebene), wie ein UITableView funktioniert auch - es wiederverwendet eine kleine Reihe von Zellenansichten und setzt den Inhalt Offset zurückgesetzt.