Un UIScrollViewcon il paging abilitato si fermerà ai multipli della sua larghezza (o altezza) del frame. Quindi il primo passo è capire quanto ampie vuoi che siano le tue pagine. Rendi quella la larghezza del file UIScrollView. Quindi, imposta le dimensioni della tua sottoview per quanto grande ti serve che siano, e imposta i loro centri in base ai multipli della UIScrollViewlarghezza di.
Poi, dal momento che si desidera visualizzare le altre pagine, naturalmente, insieme clipsToBoundsa NOcome mhjoy dichiarato. La parte del trucco ora è farla scorrere quando l'utente inizia il trascinamento al di fuori dell'intervallo del UIScrollViewframe di. La mia soluzione (quando ho dovuto farlo di recente) è stata la seguente:
Crea una UIViewsottoclasse (cioè ClipView) che conterrà le UIScrollViewe le sue sottoviste. Essenzialmente, dovrebbe avere la cornice di ciò che si presume UIScrollViewavrebbe in circostanze normali. Posiziona il UIScrollViewal centro del file ClipView. Assicurati che ClipView's clipsToBoundssia impostato su YESse la sua larghezza è minore di quella della sua vista genitore. Inoltre, ClipViewnecessita di un riferimento a UIScrollView.
Il passaggio finale consiste nell'override - (UIView *)hitTest:withEvent:all'interno di ClipView.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Questo fondamentalmente espande l'area di tocco di UIScrollViewalla cornice della vista del suo genitore, esattamente ciò di cui hai bisogno.
Un'altra opzione potrebbe essere quella di creare una sottoclasse UIScrollViewe sovrascrivere il suo - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventmetodo, tuttavia avrai ancora bisogno di una vista contenitore per eseguire il ritaglio e potrebbe essere difficile determinare quando tornare in YESbase solo al UIScrollViewframe di.
NOTA: Dovresti anche dare un'occhiata a hitTest: withEvent: modification di Juri Pakaste se hai problemi con l'interazione con l'utente della sottoview.