Comment annuler UIGestureRecognizer si la sous-vue de la touche pressée
J'ai du mal à obtenir le comportement je voudrais à partir d'un geste recognisers, plus précisément l'annulation de certains gestes si les autres en ont tiré.
J'ai un scrollView ensemble de la pagination et de multiples sous-vues dans chaque page. J'ai ajouté une touche logiciel de reconnaissance de geste pour faire défiler jusqu'à la next ou prev page si l'utilisateur appuie à droite ou à gauche de la page.
//Add a gesture recogniser turn pages on a single tap at the edge of a page
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
tapGesture.cancelsTouchesInView = NO;
[self addGestureRecognizer:tapGesture];
[tapGesture release];
et mon geste gestionnaire:
- (void) tapGestureHandler:(UIGestureRecognizer *) gestureRecognizer {
const CGFloat kTapMargin = 180;
//Get the position of the point tapped in the window co-ordinate system
CGPoint tapPoint = [gestureRecognizer locationInView:nil];
//If the tap point is to the left of the page then go back a page
if (tapPoint.x > (self.frame.size.width - kTapMargin)) [self scrollRectToVisible:pageViewRightFrame animated:YES];
//If the tap point is to the right of the page then go forward a page
else if (tapPoint.x < kTapMargin) [self scrollRectToVisible:pageViewLeftFrame animated:YES];
}
Tout fonctionne bien, sauf si j'ai une sous-vue sur la page qui a des boutons en elle. Je veux être capable d'ignorer le robinet à tourner la page si l'utilisateur appuie sur un bouton de la sous-vue et je ne peux pas comprendre comment le faire.
Acclamations
Dave
Vous devez vous connecter pour publier un commentaire.
La solution qui a fonctionné le mieux pour moi est d'utiliser la méthode hitTest pour déterminer s'il y avait des boutons en dessous de l'emplacement du robinet geste. Si il y a ensuite ignorer le reste de la geste de code.
Semble bien fonctionner. Voudrais savoir si il y a des problèmes avec ce que j'ai fait.
La documentation d'Apple montre la réponse:
Bien sûr, dans ce cas customSubview serait sous-vue sur la page qui a des boutons en elle (ou même les boutons sur elle)
Swift 3
Ensemble UITapGestureRecognizer
UITapGestureRecognizer délégué méthode:
Vous pouvez sous-classe UIView et remplacer le
-touchesBegan
sélecteur, ou vous pouvez jouer avec laopaque
propriété de la sous-vues pour les rendre "invisibles" de la touche (si la vue.opaque = N, le point de vue ignore les événements tactiles).