UISwipeGestureRecognizer @selector wird aufgrund der Einrichtung von UIPanGestureRecognizer nicht aufgerufen

StackOverflow https://stackoverflow.com//questions/22055625

Frage

In meiner iOS-App habe ich Folgendes eingerichtet:

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

das Problem ist also, dass handleSwipe nie aufgerufen wird...wenn ich die Einrichtung von UIPanGestureRecognizer auskommentiere, beginnt das handleSwipe zu funktionieren.

Ich bin ziemlich neu in der Programmierung der Gestenerkennung, daher gehe ich davon aus, dass mir hier etwas Grundlegendes fehlt.

Jede Art von Hilfe wird sehr geschätzt!

War es hilfreich?

Lösung

Sie müssen den Gesten sagen, wie sie miteinander interagieren sollen.Dies kann erreicht werden, indem Sie sie gleichzeitig ausführen lassen (standardmäßig nicht) oder indem Sie einen so einstellen, dass er nur funktioniert, wenn der andere ausfällt.

Damit beide funktionieren, machen Sie Ihre Klasse zum delegate für die Gesten und Umsetzung

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

zurückgeben YES.

Um einen so einzustellen, dass er nur funktioniert, wenn der andere ausfällt, verwenden Sie requireGestureRecognizerToFail:.

Andere Tipps

Die Wisch- und Schwenkgesten sind sehr ähnlich und das verursacht die Verwirrung,

Es gibt ein paar Mittel:

    .
  1. Setup-Pan nicht einrichten und auf derselben Ansicht streichen - es kann auf unterschiedliche Unteransicht eingestellt werden, um Verwirrungen zu vermeiden.

  2. Verwenden Sie einen anderen Erkenner zum Swipen, um sich wie ein Doppelhahn oder einen 2-Finger-Tipp umzuschalten, da dies nicht als Pfanne interpretiert werden kann

  3. Verwenden Sie die Delegate-Methode - GesturerCognizer: SOLLTEBERREQUIRIERTOFILBYSTEURECOURNIZER:

    zum Beispiel zu Chaco, wenn die Berührungen in der Umgebung der Platte / Symbolleiste begannen und den Pan-Erkenner fehlschlagen, der zulässt, dass Swipe verwendet werden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top