只捕获UIView 2手指UIPanGestureRecognizer

我在我的视图控制器中有几个UIScrollView 。 我想叠加一个视图,通过UIPanGestureRecognizer捕获2手指轻扫,这将不loggingUIScrollView轻扫手势。

当我用两指手势在我的内容上放置一个透明的视图时,我的水龙头和一个手指轻扫没有被检测到。 我试图覆盖pointInside:方法返回NO但它不logging我的2指滑动。

效果类似于4个手指轻扫来改变应用程序。

你不需要覆盖视图。
首先实现UIPanGestureRecognizer ,它将处理2个手指平移,并将其分配给包含UIScrollView的视图

 UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; panGestureRecognizer.delegate = self; panGestureRecognizer.minimumNumberOfTouches = 2; panGestureRecognizer.maximumNumberOfTouches = 2; [self.view addGestureRecognizer:panGestureRecognizer]; 

使用UIGestureRecognizerDelegateUIScrollView平移手势处理2个手指平底锅

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 

最后,你可以处理2个手指锅

 - (void)handlePan:(UIPanGestureRecognizer *)gestureRecognizer { NSLog(@"pan"); } 

如果你想停止滚动UIScrollView时,检测到两个手指锅,你可以禁用和启用UIScrollView锅识别器

 - (void)handlePan:(UIPanGestureRecognizer *)gestureRecognizer { if(gestureRecognizer.state == UIGestureRecognizerStateBegan) { _scrollView.panGestureRecognizer.enabled = NO; } if(gestureRecognizer.state == UIGestureRecognizerStateEnded) { _scrollView.panGestureRecognizer.enabled = YES; } NSLog(@"pan"); } 

如果你不需要覆盖,你可以用手势识别器来解决这个问题。 我把它写成一个testing:

 - (void)viewDidLoad { [super viewDidLoad]; self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; _scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height); UIView *green = [[UIView alloc] initWithFrame:self.view.bounds]; [green setBackgroundColor:[UIColor greenColor]]; UIView *blue = [[UIView alloc] initWithFrame:CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0)]; [blue setBackgroundColor:[UIColor blueColor]]; [_scrollView addSubview:green]; [_scrollView addSubview:blue]; UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPan:)]; [pan setMinimumNumberOfTouches:2]; [pan setMaximumNumberOfTouches:2]; [pan setDelaysTouchesBegan:YES]; [_scrollView addGestureRecognizer:pan]; [self.view addSubview:_scrollView]; } - (void)twoFingerPan:(UIPanGestureRecognizer *)gesture { switch (gesture.state) { case UIGestureRecognizerStateBegan: self.scrollView.scrollEnabled = NO; break; case UIGestureRecognizerStateCancelled: case UIGestureRecognizerStateEnded: case UIGestureRecognizerStateFailed: self.scrollView.scrollEnabled = YES; break; default: break; } NSLog(@"2 Fingers!"); } 

我得到了两个手指twoFingerPan:当使用两个手指时回拨。 滚动视图的panGestureRecognizer仍然在这个点上工作,所以我禁用滚动视图滚动处理2手指锅。 我发现这个方法工作很好。 一种不可思议的事情是,如果滚动视图正在减速,则不会调用2手指手势识别器。 希望有所帮助!