只捕获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];
使用UIGestureRecognizerDelegate
以UIScrollView
平移手势处理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手指手势识别器。 希望有所帮助!