Domanda

Nella mia app IOS ho il seguente set up:

- (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];
           }
        }
     }
 }
.

Quindi il problema è che le manigliewpe non vengono mai richiamarte ... Quando commendo il set up upangesurerecognizer, la mandola avvia il funzionamento.

Sono abbastanza nuovo per la programmazione del riconoscimento dei gesto, quindi suppongo che mi manchi qualcosa di fondamentale qui.

Qualsiasi tipo di aiuto è molto apprezzato!

È stato utile?

Soluzione

Hai bisogno di dire ai gesti come interagire tra loro.Ciò può essere fatto lasciandoli correre allo stesso tempo (il valore predefinito è che non lo faranno) o impostando uno per funzionare solo se l'altro fallisce.

Per farli funzionare, rendono la tua classe il delegate per i gesti e l'implementazione

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

Per tornare YES.

Per configurare uno solo solo se l'altro fallisce, utilizzare requireGestureRecognizerToFail:.

Altri suggerimenti

I gesti swipe e pan sono molto simili e causano la confusione,

Ci sono alcuni rimedi:

    .
  1. Non configurare Pan e Swipe sulla stessa vista: può essere impostato su una sottovieve diverse per prevenire confusioni.

  2. Utilizzare un altro riconoscimento per il passaggio per il passaggio come un doppio rubinetto o un rubinetto a 2 dita poiché questo non può essere interpretato come padella

  3. Usa il metodo Delegate - Gesterrecognizer: dovrebbeBerequequiredTofaAilbyGestureRecognizer:

    Ad esempio a Chaco se i tocchi sono iniziati nell'area del pannello / barra degli strumenti e fallire il riconoscitore Pan che consente di utilizzare Swipe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top