如何检测滑动手势的方向?

我需要检测我的滑动手势的方向,我有问题。 手势正在工作,但我不知道如何检测方向。 …

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

它不工作:/

direction属性只定义了被识别为滑动的允许方向,而不是特定滑动的实际方向。

最简单的方法是使用两个单独的手势识别器。 您也可以在手势开始时以及以locationInView:方法结束时检查触摸的locationInView:

以下是我的一个项目的例子:

  // ... 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"); } } 

扩展omz的解决scheme:

self.myView是我想把手势识别器的视图。 下面的代码没有经过testing,我想最好将这些识别器保存为property ,并将其添加到viewDidLoad()xib文件中。 self是一个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]; 

将这两个方法添加到您的UIViewController并添加必要的操作:

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