Tengo UIScrollView y quiero que se pueda desplazar en ambas direcciones (actualmente lo hace) pero solo de a una por 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?Desplazamiento de UIScrollView en una sola dirección a la vez
Respuesta
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
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
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);
}
}
Muy simple y funciona muy bien. Gracias. –
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)
}
}
- 1. UIScrollView dirección de desplazamiento
- 2. Desplazamiento programático de UIScrollView
- 3. Color de desplazamiento UIScrollView?
- 4. Modificar la dirección de desplazamiento
- 5. Sincronización de desplazamiento UIScrollView
- 6. Desplazamiento de una UITableView dentro de UIScrollView
- 7. Desplazamiento horizontal de UIScrollView en incrementos escalonados?
- 8. Desplazamiento horizontal infinito UIScrollView
- 9. UIScrollView determina la dirección de desplazamiento en scrollViewDidEndDragging cuando se busca
- 10. UIScrollView no desplazamiento horizontal
- 11. CASCADE DELETE una sola vez
- 12. .replaceWith() trabajando una sola vez
- 13. Obtener un elemento aleatorio en la lista vinculada de una sola dirección mediante una sola poligonal
- 14. UITextView dentro de UIScrollView problema de desplazamiento
- 15. Android: 'Pantalla de bienvenida' una sola vez
- 16. UIScrollView: el desplazamiento no funciona
- 17. Cómo cancelar el desplazamiento en UIScrollView
- 18. Desplazamiento horizontal UIScrollView con gesto de desplazamiento vertical
- 19. Agregar una imagen de fondo a UIScrollView
- 20. Buscar tres números apareció una sola vez
- 21. Dinámicamente incluyendo archivos javascript una sola vez
- 22. Extender UIScrollView y supervisar eventos de desplazamiento
- 23. ¿Cómo puedo hacer Compojure escuchar a una sola dirección IP
- 24. Desplazamiento animado de UIScrollView con CoreAnimation
- 25. El desplazamiento está deshabilitado cuando agrego un UIPangesturerecognizer a UIScrollView
- 26. Ubicación del gerente llamó una sola vez
- 27. UIScrollView no mostrar el indicador de desplazamiento
- 28. Pérdida de memoria cada vez que se lanza UIScrollView
- 29. ¿Cómo puedo establecer la posición de desplazamiento de un UIScrollView?
- 30. css3 sombras de caja en una sola dirección?
Huh, que establece que la propiedad de IB, pero no funcionó. Solo funcionó programáticamente. ¡Gracias! – Letrstotheprez
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 –