2012-06-12 19 views

Respuesta

51

Establezca la propiedad directionalLockEnabled en YES. De los documentos de Apple:

Si esta propiedad es NO, se permite el desplazamiento en sentido horizontal y vertical. Si esta propiedad es SÍ y el usuario comienza a arrastrar en una dirección general (horizontal o vertical), la vista de desplazamiento deshabilita el desplazamiento en la otra dirección. Si la dirección del arrastre es diagonal, el desplazamiento no se bloqueará y el usuario puede arrastrar en cualquier dirección hasta que se complete el arrastre. El valor predeterminado es NO

+2

Huh, que establece que la propiedad de IB, pero no funcionó. Solo funcionó programáticamente. ¡Gracias! – Letrstotheprez

+0

Agregué esto a: - (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView funcionó para mí. Y agregó: scrollView.directionalLockEnabled en la función. Cuando leí esta respuesta, me tomó un poco de tiempo darme cuenta de a qué estaba agregando el direccionamiento de bloqueo direccionado y dónde lo estaba agregando –

4

La respuesta aceptada para esta pregunta no es del todo correcta. De acuerdo con la documentación actual de directionalLockEnabled (como se cita en la respuesta original):

Si la dirección de arrastre es diagonal, entonces el desplazamiento no se bloqueará y el usuario puede arrastrar en cualquier dirección hasta que la fricción completa.

He encontrado que este es el caso yo mismo. Si la dirección inicial de arrastre está más cerca de un ángulo de 45 grados entre los ejes xey, falla el bloqueo direccional. Si arrastra más o menos horizontal o verticalmente, se activa el bloqueo.

Por Una forma de lograr cierto bloqueo uniaxial, consulte este enlace: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html

2

la forma más sencilla de lograr esto es colocar el directionalLockEnabled a YES e implementar el delegado UIScrollerView como esto

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.x != 0 && 
     scrollView.contentOffset.y != 0) { 
     scrollView.contentOffset = CGPointMake(0, 0); 
    } 
} 
+0

Muy simple y funciona muy bien. Gracias. –

0

Esto funcionó para mí basado en @Joe xi answer. Swift 3,0

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 { 
     scrollView.contentOffset = CGPoint(x: 0, y: 0) 
    } 
} 
Cuestiones relacionadas