À L'Aide De UITapGestureRecognizer
Nouveau à l'iPhone dev. J'ai une vue qui contient un UIScrollView qui contient une UIImageView. J'ai ajouté une (double) appuyez sur le geste de reconnaissance sur l'affichage de l'image qui en fait une boîte d'alerte s'ouvrir. Pour quelque raison, et je suis sûr que je suis juste en retard, il ouvre 3 fois.
Voici mon code:
- (void)viewDidLoad {
scrollView.delegate = self;
UIImage* image = imageView.image;
imageView.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
scrollView.contentSize = image.size;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
tapGesture.numberOfTapsRequired = 2;
[imageView addGestureRecognizer:tapGesture];
[tapGesture release];
NSLog(@"LOADED");
[super viewDidLoad];
}
-(IBAction) handleTapGesture:(UIGestureRecognizer *) sender {
CGPoint tapPoint = [sender locationInView:imageView];
int tapX = (int) tapPoint.x;
int tapY = (int) tapPoint.y;
NSLog(@"TAPPED X:%d Y:%d", tapX, tapY);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"How are you?" delegate:nil cancelButtonTitle:@"I'm awesome." otherButtonTitles:nil];
[alert show];
[alert release];
}
J'ai juste commencé à l'iPhone dev il y a quelques jours. Ce problème sorte de me rappelle de l'événement bouillonnement de questions que j'ai traitées en javascript. Des idées?
Oh, et il me semble qu'il est intéressant de noter que le NSLog ne se produit pas tous les trois fois.
OriginalL'auteur tybro0103 | 2010-10-22
Vous devez vous connecter pour publier un commentaire.
Pas sûr de ce que la raison exacte, mais le UIAlertView est en quelque sorte l'origine du geste à feu nouveau. Une solution de contournement consiste à exécuter le montrant à l'extérieur du geste à l'aide de gestionnaire de performSelector:
Edit:
Le geste de reconnaissance passe par différents états dans le geste (a Commencé, Modifié, etc) et il appelle le gestionnaire de la méthode à chaque fois que l'état change. Tellement mieux et sûrement la bonne solution est de vérifier l'état de la propriété de la geste de reconnaissance au-dessus de la gestionnaire:
OriginalL'auteur