无法正确获取UISwipeGestureRecognizer方向

我正在编写代码,以在视图上上下移动两个手指来改变某种状态。 代码如下:

UISwipeGestureRecognizer *aSwipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; [aSwipeGesture setDirection:UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown]; aSwipeGesture.numberOfTouchesRequired = 2; [self.View addGestureRecognizer:aSwipeGesture]; - (void)swipeGesture:(UISwipeGestureRecognizer *)sender { NSLog(@"Swipe received."); if (sender.direction==UISwipeGestureRecognizerDirectionUp) { NSLog(@"swipe up"); } else if (sender.direction==UISwipeGestureRecognizerDirectionDown) { NSLog(@"swipe down"); } } 

但是,我可以收到的唯一的打印日志是滑动接收如下所示。 我无法得到消息刷卡或刷卡,我错过了什么? 谢谢

 ViewController.m:228 Swipe received. ViewController.m:228 Swipe received. ViewController.m:228 Swipe received. ViewController.m:228 Swipe received. ViewController.m:228 Swipe received. ViewController.m:228 Swipe received. 

更新:我必须用两根手指完成滑动动作。

尝试这个

 UISwipeGestureRecognizer *aSwipeGestureUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; [aSwipeGesture setDirection:UISwipeGestureRecognizerDirectionUp]; aSwipeGestureUp.numberOfTouchesRequired = 2; [self.View addGestureRecognizer:aSwipeGestureUp]; UISwipeGestureRecognizer *aSwipeGestureDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; [aSwipeGestureDown setDirection:UISwipeGestureRecognizerDirectionDown]; aSwipeGestureDown.numberOfTouchesRequired = 2; [self.View addGestureRecognizer:aSwipeGestureDown]; 

令人遗憾的是API根本没有任何意义,你可以设置一个UISwipeGestureRecognizer来识别4个方向中的任何一个方向的滑动,但是它不会告诉你滑动发生的方向。

他们非常小心,以允许4个常量一起使用(这是一个位图),但API只是被打破。

你将不得不为每个方向使用一个识别器,一个耻辱!

在你的情况下,你已经设置滑动的方向为UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown。 因此,在委托callback中,您将收到sender.direction的相同值,这就是为什么日志不会被打印,因为枚举值与sender.direction值不匹配。

如果要单独处理向上和向下轻扫,则需要使用向上和向下轻扫方向创build2个轻扫手势并添加到视图中。 然后根据发件人的方向来完成任务。

UISwipeGestureRecognizer * Updown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGestureNext :)]; Updown.delegate =自我; [Updown setDirection:UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp]; [overLayView addGestureRecognizer:Updown];

  UISwipeGestureRecognizer *LeftRight=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleGestureNext:)]; LeftRight.delegate=self; [LeftRight setDirection:UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight]; [overLayView addGestureRecognizer:LeftRight]; overLayView.userInteractionEnabled=NO; -(void)handleGestureNext:(UISwipeGestureRecognizer *)recognizer { NSLog(@"Swipe Recevied"); //Left //Right //Top //Bottom } 

删除aSwipeGesture.numberOfTouchesRequired = 2; 并尝试