ios objective-c swipe gesture-recognition uiswipegesturerecognizer

ios - ¿Cómo detectar deslizar gesto de dirección?



objective-c swipe (3)

Necesito detectar la dirección de mi gesto de barrido y tengo un problema con eso. El gesto está funcionando, pero no sé cómo detectar la dirección. ...

swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(detectSwipe:)]; [swipeGesture setNumberOfTouchesRequired:1]; [swipeGesture setDirection:UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp]; [appView addGestureRecognizer:swipeGesture]; -(void)detectSwipe:(UISwipeGestureRecognizer *)recognizer { switch (recognizer.direction) { case UISwipeGestureRecognizerDirectionUp: NSLog(@"smth1"); break; case UISwipeGestureRecognizerDirectionDown: NSLog(@"smth2"); default: break; } }

no funciona :/


Aquí hay un ejemplo de uno de mis proyectos:

// ... UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; [self.view addGestureRecognizer:swipeLeft]; UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; swipeRight.direction = UISwipeGestureRecognizerDirectionRight; [self.view addGestureRecognizer:swipeRight]; UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; swipeUp.direction = UISwipeGestureRecognizerDirectionUp; [self.view addGestureRecognizer:swipeUp]; UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; swipeDown.direction = UISwipeGestureRecognizerDirectionDown; [self.view addGestureRecognizer:swipeDown]; // ... - (void)didSwipe:(UISwipeGestureRecognizer*)swipe{ if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) { NSLog(@"Swipe Left"); } else if (swipe.direction == UISwipeGestureRecognizerDirectionRight) { NSLog(@"Swipe Right"); } else if (swipe.direction == UISwipeGestureRecognizerDirectionUp) { NSLog(@"Swipe Up"); } else if (swipe.direction == UISwipeGestureRecognizerDirectionDown) { NSLog(@"Swipe Down"); } }


Extendiendo la solución de omz:

self.myView es la vista en la que quiero poner el reconocedor de gestos. El código a continuación no está probado, supongo que sería mejor mantener los reconocedores como property y agregarlos dentro de viewDidLoad() o xib . self es un UIViewController .

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedLeft:)]; [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft ]; [self.view addGestureRecognizer:swipeLeft]; UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedRight:)]; [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight ]; [self.view addGestureRecognizer:swipeRight];

Agregue esos dos métodos a su UIViewController y agregue las acciones necesarias:

- (IBAction)swipedRight:(UISwipeGestureRecognizer *)recognizer { NSLog(@"swiped right"); } - (IBAction)swipedLeft:(UISwipeGestureRecognizer *)recognizer { NSLog(@"swiped left"); }


La propiedad de direction solo define las direcciones permitidas que se reconocen como swipes, no la dirección real de un golpe en particular.

Lo más fácil sería usar dos reconocedores de gestos separados en su lugar. También puede inspeccionar la ubicación del toque cuando el gesto comienza y cuando termina con el método locationInView: .