Stellen Sie beim Erstellen der Bildlaufansicht Folgendes sicher:
scrollView.showsHorizontalScrollIndicator = false;
scrollView.showsVerticalScrollIndicator = false;
scrollView.pagingEnabled = true;
Fügen Sie dann Ihre Unteransichten mit einem Versatz zum Index * hinzu, der der Indexhöhe * des Scrollers entspricht. Dies ist für einen vertikalen Scroller:
UIView * sub = [UIView new];
sub.frame = CGRectMake(0, index * h, w, subViewHeight);
[scrollView addSubview:sub];
Wenn Sie es jetzt ausführen, sind die Ansichten voneinander getrennt, und bei aktiviertem Paging werden sie einzeln gescrollt.
Fügen Sie dies also in Ihre viewDidScroll-Methode ein:
//set vars
int index = scrollView.contentOffset.y / h; //current index
float y = scrollView.contentOffset.y; //actual offset
float p = (y / h)-index; //percentage of page scroll complete (0.0-1.0)
int subViewHeight = h-240; //height of the view
int spacing = 30; //preferred spacing between views (if any)
NSArray * array = scrollView.subviews;
//cycle through array
for (UIView * sub in array){
//subview index in array
int subIndex = (int)[array indexOfObject:sub];
//moves the subs up to the top (on top of each other)
float transform = (-h * subIndex);
//moves them back down with spacing
transform += (subViewHeight + spacing) * subIndex;
//adjusts the offset during scroll
transform += (h - subViewHeight - spacing) * p;
//adjusts the offset for the index
transform += index * (h - subViewHeight - spacing);
//apply transform
sub.transform = CGAffineTransformMakeTranslation(0, transform);
}
Die Frames der Unteransichten sind immer noch voneinander entfernt. Wir verschieben sie nur über eine Transformation, während der Benutzer einen Bildlauf durchführt.
Sie haben auch Zugriff auf die Variable p oben, die Sie für andere Zwecke wie Alpha oder Transformationen in den Unteransichten verwenden können. Wenn p == 1 ist, wird diese Seite vollständig angezeigt oder tendiert eher zu 1.