2010-11-23 31 views
2

Cela m'a complètement déconcerté!Problèmes avec UISwipeGestureRecognizer, UITapGestureRecognizer et MPMoviePlayerController :-(

J'ai un robinet pour les menus Gesture Recognizer Afficher/Masquer ...

J'ai aussi un Recognizer Gesture Swipe pour glisser gauche et à droite entre les écrans ...

Je puis ai aussi un MPMoviePlayerController pour la lecture vidéo sur l'écran.

Je gestureRecognizer:shouldReceiveTouch: et la mise en œuvre excluant tous les UIControls et tout ce qui a le préfixe "MP".

Le problème est que, chaque fois que je balaie à gauche et à droite sur les commandes du lecteur de film, le shouldReceiveTouch ne remarque que la reconnaissance de gestes du robinet, et non la touche de balayage. Il trace aussi NO correctement, et pourtant STILL déclenche la méthode de balayage.

J'ai essayé de regarder gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer mais c'est juste vraiment confus moi, car il contient également un UIPanGestureRecognizer ... D'où vient-il?

S'il vous plaît aider, je suis fatigué et avoir une grande date limite ... et ne peut pas travailler dehors :(

Merci à tous

: -Joe

Répondre

1

Bon, je dois présenter des excuses ... La raison pour laquelle il ne recevait pas shouldReceiveTouch messages était parce que je ne déclenchaient pas de son délégué !! Quel numpty. Je plaçais le délégué pour le geste de robinet, mais pas le coup. Maintenant, tout fonctionne bien.

Désolé! :-)

1

Je l'avais même problème. Voici ce que je l'ai fait pour résoudre le problème. Dans le [auto doSomething ...] méthodes que je fais une animation et si l'animation se termine il définit l'état activé de la reconnaissance revenir à YES. Soyez au courant le fait que vous rétablissiez le bon identificateur à activé! J'ai à (gauche/droite), donc le tableau gestureRecognizers a 2 entrées.

 
- (void)handleSwipeGesture:(UISwipeGestureRecognizer *)recognizer 
{ 
    if (recognizer.state == UIGestureRecognizerStateEnded && recognizer.enabled) { 
     recognizer.enabled = NO; 
     if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) 
     { 
      [self doSomethingInteresting]; 
     } 
     else { 
      [self doSomethingElseInteresting]; 
     } 
    } 
} 
 
[UIView transitionWithView:self.containerView 
      duration:kAnimationDuration 
      options:UIViewAnimationOptionTransitionCurlDown 
     animations:^{ your animations } 
     completion:^(BOOL finished) { 
       if (self.containerView.gestureRecognizers.count) { 
      ((UISwipeGestureRecognizer *)[self.containerView.gestureRecognizers objectAtIndex:0]).enabled = YES; 
} }]; 
+0

Merci beaucoup pour votre aide, mais malheureusement, je supprime déjà les reconnaisseurs de gestes pendant l'animation et je les rajoute à nouveau. En fait, je dois le faire plutôt que de définir la propriété "enabled", ce qui dégrade les vues et les rend complètement vides pour une raison quelconque! Je suis sur 3.2 donc je ne peux pas utiliser de blocs malheureusement non plus. Mais le problème semble provenir du fait que ma méthode de délégué "shouldReceiveTouch" ne reçoit aucune information de balayage, seulement appuyez sur :-( – jowie

+0

Incidemment, pourriez-vous s'il vous plaît m'expliquer comment vous utilisez un reconnaisseur de geste pour les deux balayez vers la gauche J'ai essayé de le faire à l'origine, mais quand j'ai reçu le message du sélecteur, je n'ai trouvé aucun moyen de savoir de quelle direction il provenait ... recognizer.direction renvoie juste les deux ... – jowie