无法正确获取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; 并尝试