2010-06-20 14 views
8

Dans mon application, j'ai ajouté les nouveaux outils de reconnaissance de gestes disponibles dans le SDK 3.2. Tout semble fonctionner correctement et le temps de réponse à l'écran a été très rapide. Mais pour une raison quelconque, lorsque j'ajoute requireGestureRecognizerToFail à certains de mes gestes, il y a un délai très visible lorsque le geste est déclenché. Voici un extrait du code que j'utilise pour créer les identifiants de mouvement. Est-ce que quelqu'un sait pourquoi il y a un retard et comment je peux le réparer? J'utilise requireGestureRecognizerToFail pour empêcher le déclenchement du mouvement SingleTap lorsque l'utilisateur exécute un DoubleTap.Reconnaissance gestuelle iPad - Réponse différée

- (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

Ce comportement n'est-il pas attendu? Si vous lui demandez de retarder son action jusqu'à ce qu'un autre geste échoue, alors il ne peut pas tirer jusqu'à ce que ce soit fini. Et deux robinets ont un intervalle de temps entre eux (robinets! = Touches), de sorte que vous avez besoin de ce laps de temps pour passer. – Eiko

+0

Merci, c'est logique! – Maddoxx

Répondre

6

Si vous voulez faire la distinction entre un simple et double tap, il faut attendre assez longtemps pour comprendre que pas de deuxième robinet vient avant de pouvoir l'appeler un seul robinet. L'alternative consisterait à concevoir toutes vos actions de prise de telle sorte qu'elles puissent être annulées ou annulées de manière asynchrone lorsqu'un double appui est détecté. Par exemple, si vous n'avez qu'une seule pression sur les pages et un double-clic, vous devrez animer une page en appuyant une fois, puis inverser l'animation et zoomer à la place d'une seconde pression. D'ici là, la vue qui a manipulé le robinet unique peut avoir bougé. Dans la plupart des cas, c'est plus de problèmes et de confusion que cela vaut la peine.

+1

Maintenant que je pense à ce que vous avez dit, il est parfaitement logique qu'il y ait un retard. Puisque j'ai besoin d'une réponse plus en temps réel, je devrai revenir à la gestion des événements Touch par moi-même. Merci! – Maddoxx