2011-11-21 12 views
19

Me gustaría deshabilitar el desplazamiento con dos dedos en mi UIScrollView.
I subclases y ajustado que sus reconocedores gesto incorporados con el siguiente código:Deshabilitar el desplazamiento de dos dedos en UIScrollView

for (UIGestureRecognizer *mgestureRecognizer in scroller.gestureRecognizers) {  
    if ([mgestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
    { 
     UIPanGestureRecognizer *mpanGR = (UIPanGestureRecognizer *) mgestureRecognizer; 
     mpanGR.minimumNumberOfTouches = 1; 
     mpanGR.maximumNumberOfTouches = 1; 

    } 

    if ([mgestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]) 
    { 
     UISwipeGestureRecognizer *mswipeGR = (UISwipeGestureRecognizer *) mgestureRecognizer; 
     mswipeGR.numberOfTouchesRequired = 1; 
    } 

Por alguna razón, maximumNumberOfTouches no parecen funcionar. Todavía puedo desplazarme con uno o dos dedos. Si cambio ambas propiedades a 2, puedo deshabilitar con éxito el desplazamiento con un solo dedo y requerir dos toques.

¿Alguna idea?

Respuesta

19

Me doy cuenta de que este es un hilo viejo, pero me tomó mucho tiempo resolverlo, así que pensé que lo compartiría. Esto es lo que hice para desactivar desplazarse con dos dedos:

// set up a two-finger pan recognizer as a dummy to steal two-finger scrolls from the scroll view 
// we initialize without a target or action because we don't want the two-finger pan to be handled 
UIPanGestureRecognizer *twoFingerPan = [[UIPanGestureRecognizer alloc] init]; 
twoFingerPan.minimumNumberOfTouches = 2; 
twoFingerPan.maximumNumberOfTouches = 2; 
[scrollView addGestureRecognizer:twoFingerPan]; 
+1

no funcionó para mí – Pascalius

+0

¿no debería ser * 1 * para el mínimo y el máximo? (en lugar de 2?) – yonel

+1

El código deshabilita el barrido de 2 dedos al comer los gestos de desplazamiento de 2 dedos.Así que los toques mínimo y máximo deberían ser 2. –

3

si está utilizando el SDK de iOS más de 5,0, tal vez usted puede utilizar la interfaz de usuario gesto sartén reconocedor directamente.

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 

...... 

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1]; 
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1]; 
+0

Gracias drskur ... Funciona muy bien para mí –

0

Quiero volver a abrir esta pregunta.

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 

...... 

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1]; 
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1]; 

he intentado esta solución en iOS 7 y 8 IOS, y me parece que setMaximumNumberOfTouches: 1 no tiene ningún efecto. Se puede desplazar 2 o 3 dedos. :(

0

puedo confirmar esto sigue siendo un problema en iOS 8, pero sólo cuando el UIPanGestureRecognizer subyace una UIScrollView. La creación de un UIView con una fresca UIPanGestureRecognizer y establecer sus maximumNumberOfTouches propiedad funciona como se esperaba.

rdar Enviado :. // 20890684 y copiado a http://openradar.appspot.com/radar?id=6191825677189120 No dude en engañar a

0

PROBLEMA:.

Cuando el UIPanGestureRecognizer subyace una UIScrollView (que desafortunadamente también efectuar UIPageViewController) la maximumNumberOfTouches no se comporta como se esperaba - la minimumNumberOfTouches sin embargo siempre limita el extremo inferior correctamente.

Al monitorear estos parámetros, parecen hacer su trabajo; ¡simplemente es que UIScrollView no los respeta e ignora sus valores!


RECURSO:

puede encontrar la solución en mi respuesta con:

UIScrollView scrolling only with one finger

Cuestiones relacionadas