UIPanGestureRecognizer 重新启用滚动视图
Posted
技术标签:
【中文标题】UIPanGestureRecognizer 重新启用滚动视图【英文标题】:UIPanGestureRecognizer to re-enable scrollview 【发布时间】:2014-05-28 02:14:07 【问题描述】:当 UIScrollView 达到特定偏移量时,我将其禁用,并希望在手势识别器中重新启用它。我唯一的问题是,直到用户触摸从屏幕上抬起,滚动视图才得到触摸。
如何在不抬起手指的情况下重新启用滚动视图?
UIScrollViews 类别:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
return YES;
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
gestureRecognizer.delegate = self;
gestureRecognizer.cancelsTouchesInView = NO;
gestureRecognizer.delaysTouchesBegan = NO;
gestureRecognizer.delaysTouchesEnded = NO;
[self.bodyScrollView addGestureRecognizer:gestureRecognizer];
- (void)handlePanGesture:(UIPanGestureRecognizer *)gesture
if (gesture.state == UIGestureRecognizerStateChanged)
if (self.previousAssetsScrollViewOffset.y == -44
&& !self.bodyScrollView.scrollEnabled && !self.composeScrollView.scrollEnabled)
self.bodyScrollView.scrollEnabled = YES;
self.composeScrollView.scrollEnabled = YES;
【问题讨论】:
【参考方案1】:一个问题是您没有区分手势的不同阶段(阶段)。因此,您的handlePanGesture:
在整个手势中被一遍又一遍地调用,并且永远不会放弃对手势的控制,以便滚动视图可以检测到正在发生的事情。基本上,你已经“吃掉”了整个手势,所以滚动视图永远不会听到它。
但是,即使您修复了该问题,您仍然可能会遇到问题,因为一旦您的手势识别器被识别,就不会向其他手势识别器传递任何触摸,包括滚动视图的触摸。
【讨论】:
如何将触摸传递给滚动视图?正如你提到的,如果我检查状态,它仍然不能解决我的问题。 我在第二段中说过,你会遇到麻烦。这可能是不可能的,或者您可能需要做一些额外的工作来告诉两个手势识别器(您的和滚动视图的)它们可以同时识别。你还需要让你的手势识别器松开手——在began
之后它不能做任何事情(现在是)。
hmm...所以你是说如果我在开始后移除我的手势?即使我删除我的手势也没有任何反应......我曾想过 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 应该允许同时进行吗?但是,我猜在 scrollEnabled = NO 之后这不再被尊重了?
可能!你得试试。不知道行不行。
不好 =( on state changed I do [self.composeScrollView removeGestureRecognizer:self.gestureRecognizer]; 但我猜触摸仍未转移。感谢提示。以上是关于UIPanGestureRecognizer 重新启用滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
在 UIPanGestureRecognizer 和重新启用的 UIScrollView 之间连续滚动
如何在 UIPangestureRecognizer 上禁用多点触控?
如何使用两个单独的 UIBarButtonItem 禁用/启用 UIPanGestureRecognizer?
UIPanGestureRecognizer 有时无法在 iOS 7 上运行