J'essaie d'en ajouter 2 UITapGestureRecognizers
à une vue, une pour les événements à pression unique et une pour les événements à double pression. Le module de reconnaissance de pression unique fonctionne comme prévu (seul). Mais je ne semble pas être en mesure de faire fonctionner le module de reconnaissance du double tap.
Ont essayé d'expérimenter avec des propriétés telles que : cancelsTouchesInView
, delaysTouchesBegan
et delaysTouchesEnded
mais ne fonctionne toujours pas.
Lorsque je touche deux fois, la reconnaissance de pression unique est toujours activée et l'événement de double pression est également envoyé à la super vue. Mais le module de reconnaissance personnalisé du double tap ne semble pas du tout être notifié.
Les documentations semblent suggérer que les 3 propriétés mentionnées ci-dessus pourraient être utilisées à cette fin. Mais je ne suis tout simplement pas sûr des valeurs à définir et sur quel (s) module de reconnaissance (simple, double ou les deux). J'espère que quelqu'un familier avec cela pourra vous aider.
Ce qui suit est le dernier bloc de code mis à jour.
// ****** gesture recognizers ******
- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
// single tap
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];
[singleTapRecognizer setNumberOfTouchesRequired:1];
[view addGestureRecognizer: singleTapRecognizer];
// double tap
UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];
[doubleTapRecognizer setNumberOfTouchesRequired:2];
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[view addGestureRecognizer: doubleTapRecognizer];
}
- (void)handleSingleTapOnView:(id)sender
{
}
- (void)handleDoubleTapOnView:(id)sender
{
}
Réponses:
Remarque: si vous l'utilisez,
numberOfTouchesRequired
il doit être.numberOfTouchesRequired = 1;
Pour Swift
la source
Solution Swift 3:
Dans la ligne de code singleTap.require (toFail: doubleTap), nous forçons le simple tap à attendre et à nous assurer que l'événement tap n'est pas un double tap.
la source
Vous devez utiliser la méthode requireGestureRecognizerToFail :. Quelque chose comme ça:
[singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];
la source
// ---- tout d'abord, vous devez allouer le geste double et simple tap ------- //
// ----------------------- nombre de tap ---------------- //
// ------- ajouter un double tap et un simple geste sur la vue ou le bouton -------- //
la source
Je ne sais pas si c'est exactement ce que vous recherchez, mais j'ai fait des tapotements simples / doubles sans reconnaissance de gestes. Je l'utilise dans un UITableView, j'ai donc utilisé ce code dans la méthode didSelectRowAtIndexPath
Les méthodes singleTap et doubleTap sont simplement vides avec NSIndexPath comme paramètre:
J'espère que ça aide
la source
Solution pour Swift 2:
la source
J'ai implémenté les méthodes UIGestureRecognizerDelegate pour détecter à la fois singleTap et doubleTap.
Fais juste ça.
Ensuite, implémentez ces méthodes de délégation.
la source
Certaines vues ont leurs propres outils de reconnaissance intégrés (
MKMapView
à titre d'exemple). Pour contourner cela, vous devrez implémenter laUIGestureRecognizerDelegate
méthodeshouldRecognizeSimultaneouslyWithGestureRecognizer
et retournerYES
:Commencez par implémenter vos systèmes de reconnaissance double et simple:
Et puis implémentez:
la source
En référence au commentaire de @ stanley -
N'essayez pas d'utiliser les gestes tactiles pour sélectionner les lignes dans lesquelles travailler,
UITableView
car il dispose déjà d'une gestion complète des pressions ....Mais vous devez définir `` Annule les touches dans la vue '' sur `` NON '' sur vos outils de reconnaissance de gestes à pression unique, sinon il n'obtiendra jamais les événements de pression.
la source