Un UIScrollView
con 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 UIScrollView
larghezza di.
Poi, dal momento che si desidera visualizzare le altre pagine, naturalmente, insieme clipsToBounds
a NO
come mhjoy dichiarato. La parte del trucco ora è farla scorrere quando l'utente inizia il trascinamento al di fuori dell'intervallo del UIScrollView
frame di. La mia soluzione (quando ho dovuto farlo di recente) è stata la seguente:
Crea una UIView
sottoclasse (cioè ClipView
) che conterrà le UIScrollView
e le sue sottoviste. Essenzialmente, dovrebbe avere la cornice di ciò che si presume UIScrollView
avrebbe in circostanze normali. Posiziona il UIScrollView
al centro del file ClipView
. Assicurati che ClipView
's clipsToBounds
sia impostato su YES
se la sua larghezza è minore di quella della sua vista genitore. Inoltre, ClipView
necessita 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 UIScrollView
alla cornice della vista del suo genitore, esattamente ciò di cui hai bisogno.
Un'altra opzione potrebbe essere quella di creare una sottoclasse UIScrollView
e sovrascrivere il suo - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
metodo, tuttavia avrai ancora bisogno di una vista contenitore per eseguire il ritaglio e potrebbe essere difficile determinare quando tornare in YES
base solo al UIScrollView
frame 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.