2010-06-20 7 views
8

En mi aplicación, he agregado los nuevos Reconocedores de gestos que están disponibles en el SDK 3.2. Todo parece estar funcionando correctamente y el tiempo de respuesta en la pantalla ha sido muy rápido. Pero por alguna razón cuando agrego requireGestureRecognizerToFail a algunos de mis gestos, hay un retraso muy visible cuando se activa el gesto. A continuación se muestra un fragmento del código que utilizo para crear los Reconocedores de gestos. ¿Alguien sabe por qué hay un retraso y cómo puedo solucionarlo? Estoy usando requireGestureRecognizerToFail para evitar que el gesto SingleTap se dispare cuando el usuario realiza un DoubleTap.reconocedor de gestos del iPad - Respuesta diferida

- (void)createGestureRecognizers { 

//Single Finger Double-Tap 
UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handleSingleDoubleTap:)]; 
    singleFingerDTap.numberOfTapsRequired = 2; 
    [super addGestureRecognizer:singleFingerDTap]; 

//Single Finger Tap 
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] 
       initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleFingerTap.numberOfTapsRequired = 1; 
[singleFingerTap requireGestureRecognizerToFail:singleFingerDTap]; 
[self addGestureRecognizer:singleFingerTap]; 

//Two Finger Pan 
UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handlePanGesture2:)]; 
    panGesture2.maximumNumberOfTouches = 2; 
[super addGestureRecognizer:panGesture2]; 

//Single Finger Pan 
UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handlePanGesture1:)]; 
    panGesture1.maximumNumberOfTouches = 1; 
[panGesture1 requireGestureRecognizerToFail:panGesture2]; 
[super addGestureRecognizer:panGesture1]; 

[singleFingerDTap release]; 
[singleFingerTap release]; 
    [panGesture1 release]; 
[panGesture2 release]; 
} 
+0

¿No es el comportamiento esperado? Si le pide que retrase su acción hasta que otro gesto falle, no podrá disparar hasta que esto termine. Y dos grifos tienen un lapso de tiempo entre ellos (toques! = Toques), por lo que necesita este lapso de tiempo para pasar. – Eiko

+0

¡Gracias, eso tiene perfecto sentido! – Maddoxx

Respuesta

6

Si desea distinguir entre un único y doble toque, debe esperar el tiempo suficiente para darse cuenta de que hay un segundo grifo está llegando antes de poder llamar a un solo toque. La alternativa sería diseñar todas las acciones de un solo toque de forma que se puedan cancelar o revertir de forma asíncrona cuando se detecte un doble toque.

Por ejemplo, si tiene un solo toque, cambie de página y pulse dos veces el zoom, entonces deberá animar un cambio de página con un solo toque, luego invertir la animación y acercarse cuando se detecte un segundo toque. Para entonces, la vista que maneja el único toque puede haberse movido. En la mayoría de los casos, eso es más problemas y confusión, entonces vale la pena.

+1

Ahora que pienso en lo que dices, tiene perfecto sentido que haya un retraso. Como necesito una respuesta más en tiempo real, tendré que volver a manejar los eventos Touch por mi cuenta. ¡Gracias! – Maddoxx

Cuestiones relacionadas