A UIScrollViewcon la paginación habilitada se detendrá en múltiplos de su ancho (o alto) de marco. Entonces, el primer paso es averiguar qué tan amplias quieres que sean tus páginas. Que sea el ancho del UIScrollView. Luego, establezca los tamaños de su subvista por muy grandes que necesite, y establezca sus centros en base a múltiplos de la UIScrollViewanchura.
Entonces, ya que desea ver las otras páginas, por supuesto, establecidos clipsToBoundsa NOlo mhjoy declaró. La parte del truco ahora es hacer que se desplace cuando el usuario comience a arrastrar fuera del rango del UIScrollViewmarco de. Mi solución (cuando tuve que hacer esto muy recientemente) fue la siguiente:
Cree una UIViewsubclase (es decir ClipView) que contendrá las UIScrollViewsubvistas y sus. Esencialmente, debe tener el marco de lo que supondría UIScrollViewque tendría en circunstancias normales. Coloque el UIScrollViewen el centro del ClipView. Asegúrese de que el ClipView's clipsToBoundsesté configurado como YESsi su ancho es menor que el de su vista principal. Además, ClipViewnecesita una referencia a UIScrollView.
El último paso es anular - (UIView *)hitTest:withEvent:dentro del ClipView.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Básicamente, esto expande el área táctil del UIScrollViewal marco de la vista de su padre, exactamente lo que necesita.
Otra opción sería crear una subclase UIScrollViewy anular su - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventmétodo, sin embargo, aún necesitará una vista de contenedor para hacer el recorte, y puede ser difícil determinar cuándo regresar YESbasándose solo en el UIScrollViewmarco de.
NOTA: También debe echar un vistazo a la modificación hitTest: withEvent: de Juri Pakaste si tiene problemas con la interacción del usuario de la subvista.