Objective-C : UIScrollView manuelle paging
Möchte ich die scrollview so etwas wie ein Kommissionierer in den horizontalen Modus.
Die scrollview hält bis zu sieben Untersichten.
Jeder Untersicht einen Wert darstellt.
Immer drei Ansichten sichtbar sind, und der in der Mitte ausgewählt.
Scrollview sichtbar an den start:
__ | V1 | V2
Scrollview-set anzeigen/Wert zwei:
V1 | V2 | V3
Scrollview gesetzt letzter Wert:
V2 | V3 | __
Das wirkliche problem, das ich habe, ist die "pagingEnabled" - flag.
Wenn pagingEnabled auf JA gesetzt ist die scrollview Seiten immer drei Unteransichten/Werte statt nur einem.
Wenn pagingEnabled auf NEIN gesetzt ist die scrollview nicht clinch.
Ist es eine schöne Lösung für mein problem?
Vielen Dank,
Dan 😉
- Siehe meine Antwort auf diese Frage: stackoverflow.com/a/10993426/60488
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie den Rahmen der scrollview zu werden, als ob es nur die Anzeige der mittleren Ansicht (D. H. ein Drittel seiner ursprünglichen Breite und den Versatz um den gleichen Betrag), aber dann legen Sie seine
clipsToBounds
- Eigenschaft auf NEIN.clipsToBounds
zu NICHT erreicht 🙂Ich habe eine Lösung gefunden, wenn jemand interessiert ist.
Weisen Sie die Delegierten einer scrollview. Ovveride scrollViewDidEndDecelerating, danach erhalten Sie Ihre aktuellen index(Seite, die Sie möchten) etwas zu tun, zu mögen.
Seit iOS 5 gibt es die
scrollViewWillEndDragging:withVelocity:targetContentOffset:
delegate-Methode aufUIScrollViewDelegate
. Dies ermöglicht Ihnen die Realisierung beliebiger paging.Damit dies funktioniert, müssen Sie zunächst die
pagingEnabled
EigenschaftNO
, sonst wird die delegate-Methode, die ich spreche, ist nicht genannt. Die scroll-view ruft nun diese delegate-Methode wird, wenn der Benutzer hebt den finger und die scroll-view will bestimmen, wo beenden Sie die scrollen.Die Magie ist das Letzte argument,
targetContentOffset
: es ist ein Zeiger auf eineCGPoint
und verwendet als in/out Variablen. Dies bedeutet, dass diese variable sagt dir, wo der scrollview scrollen möchte, um. Aber Sie können Sie ändern Sie das Zielverzeichnis. Dievelocity
könnte auch von Interesse sein, es kann Ihnen einen Hinweis darauf geben, ob der Anwender "schiebt" die scroll-view oder verschoben, gestoppt, dann hob seinen finger.Zum Beispiel, hier ist eine Umsetzung, Runden das Ziel
x
Lage auf das nächste Vielfache von 100, so dass "Seiten" von 100 Punkten Breite.