如何检测滑动手势的方向?
我需要检测我的滑动手势的方向,我有问题。 手势正在工作,但我不知道如何检测方向。 …
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"); }