Prévenir les parents de la vue à partir de la réception d'événement tactile après la vue enfant agit sur lui
Je vais avoir un problème avec le répondeur de la chaîne des événements sur une application iOS.
Le problème est le suivant, j'ai un ensemble de sous-vues (bulles) sur une plus grande vue (carré) et je veux être en mesure de montrer un certain point de vue si je tape sur les touches, cependant si je tape n'importe où ailleurs, je veux le même point de vue à cacher.
Le problème est quand je me tape une bulle, les deux points de vue (enfant et parent) sont de déclenchement, comment puis-je éviter cela?
Si l'enfant a déjà agi sur un événement tactile ne pourrait-il pas être la fin de celui-ci?
Mes Bulles sont reconnaissant le Robinet geste avec UITapGestureRecognizer alors que la vue parent (carré) utilise touchesBegan: méthode
Ce graphique explique ma configuration actuelle avec plusieurs bulles:
Code:
@implementation Bubble
...
-(id) initWithFrame: (CGRect) frame {
UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSingleTap:)];
singleFingerDTap.numberOfTapsRequired = 1;
[self addGestureRecognizer:singleFingerDTap];
}
-(void) handleSingleTap {
NSLog(@"Bubble tapped, show the view");
}
pour le Carré
@implementation Square
...
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"square touched, lets hide the view");
}
Après un Robinet, je vois les deux NSLogs sur la console
exemple de code inclus
OriginalL'auteur perrohunter | 2012-10-09
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que le problème est. UIView hérite de UIResponder, et la base de toucher des événements sont détectés par la vue qui déclenche la touche a commencé événements. Les sous-vues que vous avez ajouté dans la vue principale répond aussi à la touche a commencé méthode.C'est très basique. Vous avez également ajouté un sélecteur de méthode avec robinet geste de reconnaissance. Donc tout contact avec des bulles de déclencher les deux méthodes, et donc les deux journaux. Essayez d'ajouter un autre geste de reconnaissance à la vue avec un autre sélecteur, comme
OriginalL'auteur Meera
Bien , c'est ça le problème .
touchesBegan
obtiendrez toutes les touches , y compris celles prises par le geste de reconnaissance. Vous pouvez essayer de mettregestureRecognizer.cancelsTouchesInView = TRUE
ou de l'utilisation touchesBegan pour vos bulles.Puisqu'il semble que vous êtes de faire un jeu ici , êtes-vous à l'aide du moteur comme cocos2D ?
Si c'est le cas , il y a des façons plus faciles à accomplir ce que vous voulez.
Espère que cette aide.
Cheers!
EDIT:
Si vous utilisez uniquement des modules de reconnaissance de geste , le toucher ne sera pas envoyé à la vue suivante dans la hiérarchie. Je pense que c'est ce que vous voulez. Si vous décidez d'aller avec des touches a commencé je pense que vous devriez faire quelque chose comme ceci:
//en de la bulle de vue de la classe
PS: n'est pas un jeu :p
OriginalL'auteur George
Ce faire:
OriginalL'auteur Paresh Navadiya
Pourquoi ne pas utiliser un robinet logiciel de reconnaissance de geste sur l'écran principal? Touche a commencé, c'est comme écrire votre propre logiciel de reconnaissance de geste, mais beaucoup plus difficile. Avec de multiples appuyez sur recognisers, un seul feu.
Parfois, il est plus rapide de simplement essayer vous-même au lieu d'attendre que quelqu'un d'autre à vous dire.
OriginalL'auteur jrturton