Quando crei la scrollview, assicurati di impostare questo:
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.pagingEnabled = true
Quindi aggiungi le tue viste secondarie allo scroller con un offset uguale al loro indice * altezza dello scroller. Questo è per uno scroller verticale:
UIView * sub = [UIView new];
sub.frame = CGRectMake(0, index * h, w, subViewHeight);
[scrollView addSubview:sub];
Se lo esegui ora, le viste sono distanziate e con il paging abilitato scorrono una alla volta.
Quindi mettilo nel tuo metodo viewDidScroll:
int index = scrollView.contentOffset.y / h;
float y = scrollView.contentOffset.y;
float p = (y / h)-index;
int subViewHeight = h-240;
int spacing = 30;
NSArray * array = scrollView.subviews;
for (UIView * sub in array){
int subIndex = (int)[array indexOfObject:sub];
float transform = (-h * subIndex);
transform += (subViewHeight + spacing) * subIndex;
transform += (h - subViewHeight - spacing) * p;
transform += index * (h - subViewHeight - spacing);
sub.transform = CGAffineTransformMakeTranslation(0, transform);
}
I fotogrammi delle viste secondarie sono ancora distanziati, li stiamo semplicemente spostando insieme tramite una trasformazione mentre l'utente scorre.
Inoltre, hai accesso alla variabile p sopra, che puoi usare per altre cose, come alfa o trasformazioni all'interno delle viste secondarie. Quando p == 1, quella pagina viene mostrata completamente, o meglio tende verso 1.