2011-10-19 2 views
0

Je travaille pour intégrer les gestes dans une application de dessin pour l'iPad. Par exemple, je voudrais faire un balayage à trois doigts pour annuler une étape de dessin.J'ai besoin de retarder le toucher pour 3 doigts et non 1 doigt

J'ai des problèmes empêchant les données tactiles d'aller à touchesBegan: withEvent: qui provoque le dessin à l'écran lors de l'exécution du geste.

Si j'utilise la propriété delayTouchesBegan, je peux empêcher le glissement à trois doigts de transmettre ces données tactiles. Cependant, il retarde également un dessin lorsque l'utilisateur essaie de dessiner une ligne qui va à gauche. Cela a pour conséquence que la ligne commence loin de l'endroit où l'utilisateur a commencé à dessiner.

Comment puis-je m'assurer que mon application ne retarde qu'un balayage à trois doigts et non un simple glissement du doigt?

UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)]; 

recognizer.numberOfTouchesRequired = 3; 
recognizer.direction = UISwipeGestureRecognizerDirectionLeft; 
recognizer.delaysTouchesBegan = YES; 

[self.view addGestureRecognizer:recognizer]; 

Répondre

2

J'ai trouvé une solution à ce problème. Au lieu d'utiliser la propriété delayTouchesBegan du détecteur de mouvement, vous pouvez détecter le nombre de touches à l'aide du UIEvent transmis aux différentes méthodes tactiles. Ensuite, limitez simplement l'action dans le touchBegan: withEvent :, touchesMoved: withEvent :, et touchEnded: withEvent: méthodes à effectuer uniquement lorsqu'il y a une seule touche.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    //only process touch data if there is a single touch 
    if ([[event allTouches] count] == 1) { 
     //draw 
    } 
} 
1

Ceci est un problème connu avec les gestes. Il n'y a aucun moyen de contourner cela, d'autres optent alors pour UISwipeGestureRecognizer et effectuent la gestion des gestes manuellement avec touchesBegan/Ended. Ensuite, vous pouvez définir une minuterie personnalisée avec un seuil inférieur.

+0

Savez-vous comment régler quelque chose comme ça? – robhasacamera

+0

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html – logancautrell

+0

J'ai trouvé une solution qui ne nécessite pas la configuration d'un outil de reconnaissance de mouvements personnalisé. Merci pour l'aide cependant, l'article a fourni certaines des informations dont j'avais besoin pour comprendre comment les événements multitouch sont traités. – robhasacamera

Questions connexes