A UIScrollView
con 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 UIScrollView
anchura.
Entonces, ya que desea ver las otras páginas, por supuesto, establecidos clipsToBounds
a NO
lo mhjoy declaró. La parte del truco ahora es hacer que se desplace cuando el usuario comience a arrastrar fuera del rango del UIScrollView
marco de. Mi solución (cuando tuve que hacer esto muy recientemente) fue la siguiente:
Cree una UIView
subclase (es decir ClipView
) que contendrá las UIScrollView
subvistas y sus. Esencialmente, debe tener el marco de lo que supondría UIScrollView
que tendría en circunstancias normales. Coloque el UIScrollView
en el centro del ClipView
. Asegúrese de que el ClipView
's clipsToBounds
esté configurado como YES
si su ancho es menor que el de su vista principal. Además, ClipView
necesita 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 UIScrollView
al marco de la vista de su padre, exactamente lo que necesita.
Otra opción sería crear una subclase UIScrollView
y anular su - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
método, sin embargo, aún necesitará una vista de contenedor para hacer el recorte, y puede ser difícil determinar cuándo regresar YES
basándose solo en el UIScrollView
marco 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.