Esperemos que alguien pueda ayudar con este problema. Tengo una clase derivada de UIScrollView y me gustaría evitar que el usuario pueda acercarse o alejarse mediante los movimientos manuales de pellizcar y deslizar. Toda la navegación de la vista será controlada por medios programáticos en respuesta a los golpes del usuario (piense en un lector de libros electrónicos donde tocar en el lado izquierdo o derecho de la pantalla hace que la vista se desplace exactamente por un ancho de página). ¿Alguna sugerencia sobre cómo implementar esto?Cómo evitar el acercamiento manual en un UIScrollView
Respuesta
que no tienen demasiada experiencia con UIScrollView
s, pero mirando a los documentos, parece que se puede establecer maximumZoomScale
, minimumZoomScale
y scrollEnabled
desactivar todo lo que desea desactivar.
Éstos son los documentos: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html
A partir de los documentos:
scrollEnabled
:
Si el valor de esta propiedad es SÍ, desplazamiento está activado, y si hay , el desplazamiento está deshabilitado. El valor predeterminado es SÍ.
Cuando el desplazamiento está deshabilitado, la vista de desplazamiento no acepta eventos táctiles; los reenvía a la cadena de respuesta.
maximumZoomScale
:
Este valor determina el tamaño del contenido se puede escalar. Debe ser mayor que la escala de zoom mínima para habilitar el zoom. El valor predeterminado es 1.0.
Para evitar que el usuario-controlador de zoom y panorámica, pero todavía permiten zoom programático y la panorámica de un ScrollView, el mejor enfoque es para anular el método de la UIScrollView -addGestureRecognizer:
en una subclase. En mi uso que querían bloquear todos los reconocedores y controlar el área visible por completo de mi controlador de vista, lo hice así:
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
//Prevent any of the default panning and zooming controls from working
gestureRecognizer.enabled = NO;
[super addGestureRecognizer:gestureRecognizer];
}
Cada reconocedor gesto es simplemente personas con discapacidad, para un control más fino (que permite el control de panorama pero solo permite hacer zoom con un doble toque, por ejemplo) simplemente verificas el reconocedor de gestos entrantes a través del -isKindOfClass:
y deshabilitas según corresponda.
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
//Prevent zooming but not panning
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) {
gestureRecognizer.enabled = NO;
}
[super addGestureRecognizer:gestureRecognizer];
}
I utilizado este método en una aplicación de lectura de historietas que utiliza navegación para animar entre paneles recortadas en una página con la página completa guiado está contenida en un UIScrollView.I sin problemas se puede acercar y alejar en un área seleccionada por simplemente configurando los límites de la vista en la región que quiero mostrar.
¿cómo se puede saber que Apple siempre usará un UIPinchGestureRecognizer aquí? ¿No es esta una forma incierta de lograr el objetivo? –
En su - (void)viewDidLoad;
debería poder deshabilitar cualquier reconocedor de gestos que desee.En este caso:
UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer;
pinchRecognizer.enabled = NO;
o
UIPanGestureRecognizer *panRecognizer = self.scrollView.panGestureRecognizer;
panRecognizer.enabled = NO;
veces hago esto desde los controladores de vista que contienen UIScrollViews. Simplemente apuntar a la vista de desplazamiento (self.scrollView.pinchGestureRecognizer
) y deshabilitar temporalmente los gestos cuando la aplicación. está en cierto estado.
El 'UIPinchGestureRecognizer' parece estar habilitado internamente configurando las escalas de zoom. Desactívelo * después de * configurarlos programáticamente. –
Una nota rápida aquí. Parece que UIScrollView
's panGestureRecognizer
y pinchGestureRecognizer
están habilitados la primera vez que se agrega un controlador de vista a una ventana.
Básicamente lo que eso significa es configurarlos en enabled = NO
en viewDidLoad
no funcionará en algunos casos. Moví mi enabled = NO
a viewWillAppear:
y se bloqueó. :)
En la subclase UIScrollView sobrescribir también la setZoomScale: método que de nuevo automáticamente desactiva el gesto
- (void)setZoomScale:(CGFloat)zoomScale {
[super setZoomScale:zoomScale];
self.pinchGestureRecognizer.enabled = NO;
}
- 1. Acercamiento correcto a un UIScrollView que contiene muchas subvistas
- 2. Cómo evitar el acercamiento de un objeto con una posición fija en el iPhone (y otros dispositivos móviles)
- 3. Prevenir el acercamiento de Phonegap + JQuery Mobile
- 4. Bookmarklet acercamiento
- 5. ¿Cómo reinicio después de un zoom UIScrollView?
- 6. ¿Cómo crear un UIScrollView programáticamente?
- 7. ¿Cómo puedo anidar un UIScrollView dentro de UIScrollView para que el usuario pueda desplazar el UIScrollView interno?
- 8. ¿Acortar el retraso táctil en un UIScrollView?
- 9. Cómo incrustar un UITableView en una UIScrollView
- 10. ¿Cómo puse viewController en un UIScrollView
- 11. UIWebView deshabilita el acercamiento mediante programación
- 12. Cómo calcular el destino de un contentOffset UIScrollView en movimiento
- 13. Cómo cancelar el desplazamiento en UIScrollView
- 14. Cómo habilitar el zoom en UIScrollView
- 15. ¿Cómo se llama un simulacro 'manual'?
- 16. 2 UITableView en un UIScrollView
- 17. Cómo anotar muy bien un ggplot2 (manual)
- 18. UIImageView y UIScrollView zooming
- 19. Combinación manual en GIT
- 20. Zoom de acercamiento de imagen en NSImageView
- 21. Loop un UIScrollView
- 22. Restricción de panorámica y acercamiento
- 23. ¿Cómo fuerza forzosamente un pergamino mediante UIScrollView?
- 24. ¿Cómo siempre se puede desplazar un UIScrollView?
- 25. ¿Cómo habilito el bloqueo direccional para un UIScrollView?
- 26. Cómo desplazar automáticamente UIScrollView usando el temporizador
- 27. ¿Cómo hago zoom programáticamente un UIScrollView?
- 28. ¿Hay un manual de WEBGL?
- 29. ¿Cómo puedo usar UIScrollView?
- 30. Uiscrollview con UIButtons: ¿cómo recrear el trampolín?
acabé descubriendo esto se hace mejor por la subclasificación de la ScrollView, y su sustitución por el método que se conecta un gesto Reconocedor a la vista. Al interceptar esto, puede verificar la clase del reconocedor de gestos que se adjunta y bloquear los reconocedores de gestos de pellizco y panorámica. Para el código que estaba escribiendo, quería evitar que los gestos usuales de pellizcar y desplazarse funcionen de modo que la navegación esté exclusivamente bajo control programático. Simplemente configuré la subclase heredada para nunca adjuntar reconocedores de gestos y luego mi código actuó en eventos táctiles recibidos por la subvista de la vista de desplazamiento. – Shinohara
Hola, ¿tienes un ejemplo de este código? ¡Gracias! –