Question

Dans mon application iOS, j'ai la suite à mettre en place:

- (void)setupGestures
{
   UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];                                                           
   [self.view addGestureRecognizer:panRecognizer];

   UISwipeGestureRecognizer* swipeUpRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

   [swipeUpRecognizer setDirection:UISwipeGestureRecognizerDirectionUp];
   [self.view addGestureRecognizer:swipeUpRecognizer];
}

// then I have following implementation of selectors

// this method supposed to give me the length of the swipe

- (void)panGesture:(UIPanGestureRecognizer *)sender 
{
   if (sender.state == UIGestureRecognizerStateBegan)
   {
      startLocation = [sender locationInView:self.view];
   }
   else if (sender.state == UIGestureRecognizerStateEnded)
   {
      CGPoint stopLocation = [sender locationInView:self.view];
      CGFloat dx = stopLocation.x - startLocation.x;
      CGFloat dy = stopLocation.y - startLocation.y;
      CGFloat distance = sqrt(dx*dx + dy*dy );
      NSLog(@"Distance: %f", distance);
   }
 }

 // this  method does all other actions related to swipes

- (void)handleSwipe:(UISwipeGestureRecognizer *)gestureRecognizer
{
 UISwipeGestureRecognizerDirection direction = [gestureRecognizer direction];
     CGPoint touchLocation = [gestureRecognizer locationInView:playerLayerView];

     if (direction == UISwipeGestureRecognizerDirectionDown && touchLocation.y >  (playerLayerView.frame.size.height * .5))
     {
        if (![toolbar isHidden])
        {
           if (selectedSegmentIndex != UISegmentedControlNoSegment)
           {
              [self dismissBottomPanel];
           }
           else
           {
             [self dismissToolbar];
           }
        }
     }
 }

donc, le problème est que handleSwipe n'est jamais appelé...quand je commenter la UIPanGestureRecognizer mis en place, le handleSwipe commence à travailler.

Je suis assez nouveau à la geste de reconnaissance de la programmation, donc je suis en supposant que je suis absent quelque chose de fondamental ici.

Toute aide est très appréciée!

Était-ce utile?

La solution

Vous devez indiquer les gestes, la façon d'interagir les uns avec les autres.Qui peut être fait en leur permettant de fonctionner en même temps (par défaut c'est qu'ils ne sont pas) ou en définissant un travail uniquement si l'autre échoue.

Pour les rendre à la fois le travail, faire de votre classe à la delegate pour les gestes et les mettre en œuvre

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

de retour YES.

Pour définir l'un pour que les autres échoue, utilisez requireGestureRecognizerToFail:.

Autres conseils

Les galets de glissement et de panoramique sont très similaires et qui provoque la confusion,

Il y a quelques remèdes:

  1. Ne pas configurer la casserole et la balayage de la même vue - il peut être défini sur une sous-Sous-sousview pour empêcher les confusions.

  2. Utilisez un autre reconnaissant pour glisser pour basculer comme un double robinet ou un tapoteur à 2 doigts car cela ne peut pas être interprété comme une casserole

  3. Utilisez la méthode du délégué - Gesurerecognizer: DopperequiredtofailByBeCognizer:

    Par exemple, à Chaco, si les touches ont commencé dans la zone de la barre de panneau / de la barre d'outils et échouent, le releveur de panoramique permettant à Swipe d'être utilisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top