iphone - inside - swift scrollview not scrolling
Desplazamiento de UIScrollView en una sola dirección a la vez (4)
Tengo un UIScrollView y quiero que pueda desplazarse en ambas direcciones (actualmente lo hace) pero solo una a la vez. Entonces, por ejemplo, si comienzas a desplazarte horizontalmente, no se moverá verticalmente hasta que lo sueltes y comiences a moverlo verticalmente. ¿Cómo podría hacer esto?
Esto funcionó para mí basado en la respuesta de @Joe xi. Swift 3.0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
scrollView.contentOffset = CGPoint(x: 0, y: 0)
}
}
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, el desplazamiento no se bloqueará y el usuario puede arrastrar en cualquier dirección hasta que finalice el arrastre.
He encontrado que este es mi caso. Si la dirección inicial de arrastre está más cerca de un ángulo de 45 grados entre los ejes x e y, el bloqueo direccional falla. Si arrastra más o menos horizontal o verticalmente, se activa el bloqueo.
Para obtener una forma de lograr un verdadero bloqueo uniaxial, consulte este enlace: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html
la forma sencilla de lograr esto es establecer directionalLockEnabled
en YES
e implementar el delegado UIScrollerView de esta manera
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x != 0 &&
scrollView.contentOffset.y != 0) {
scrollView.contentOffset = CGPointMake(0, 0);
}
}
Establezca la propiedad directionalLockEnabled
en YES. De los documentos de Apple:
Si esta propiedad es NO, se permite el desplazamiento tanto en dirección horizontal como vertical. Si esta propiedad es SÍ y el usuario comienza a arrastrar en una dirección general (horizontal o verticalmente), la vista de desplazamiento desactiva el desplazamiento en la otra dirección. Si la dirección de arrastre es diagonal, el desplazamiento no se bloqueará y el usuario puede arrastrar en cualquier dirección hasta que finalice el arrastre. El valor predeterminado es no