UIScrollView 在拖动和点击之间做出决定
Posted
技术标签:
【中文标题】UIScrollView 在拖动和点击之间做出决定【英文标题】:UIScrollView decide between drag and tap 【发布时间】:2011-11-28 19:50:44 【问题描述】:我正在尝试确定 UIScrollView 内视图上的单个选项卡。问题是 UIScrollview 捕捉到了所有的手势。
到目前为止我尝试了什么: 我在 UIScrollView 中覆盖了以下方法:
-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
UITouch *touch = [touches anyObject];
if([touch tapCount]== 2) return YES;
return NO;
这很好用,我现在可以在我的 UIView 上到达 UITapGestureRecognize,不幸的是我只能检测到双击,因为总是调用 [touch tapCount] == 1(在 UIScrollView 中拖动或缩放)。但实际上 UIScrollview 不需要“Single-Tap-Function”
有没有办法在此方法内决定拖动(滚动或缩放)和单击?没找到。。
-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
提前致谢 法比
【问题讨论】:
【参考方案1】:如果触摸不滚动滚动视图,听起来您只希望点击识别器成功。这很容易,因为滚动视图使用平移手势识别器进行滚动。在 ios 5 上,您可以这样做:
[self.tapRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];
如果你想支持旧版本的 iOS,你必须这样做:
for (UIGestureRecognizer *recognizer in self.scrollView.gestureRecognizers)
if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]])
[self.tapRecognizer requireGestureRecognizerToFail:recognizer];
【讨论】:
我在 ios4 上的这段代码有问题。我用自己的 panrecognizer 在 uiscrollview 上捕捉手势: pan.delaysTouchesBegan = YES; pan.delaysTouchesEnded = 否;此设置在 ios5 上运行良好。当我的手势识别器委托在 shouldReceiveTouch 方法中返回 YES 时,滚动手势没有使用 scrollViewDidScroll 调用任何更改。【参考方案2】:touchesShouldBegin:
是 UIView 上的委托方法。它不是 UIGestureRecognizer 的一部分。
您需要创建一个 UITapGestureRecognizer,设置要触发识别器的点击次数并将其添加到您的视图中。
Here is the documentation for UITapGestureRecognizer
【讨论】:
您好兰德尔,感谢您的回答。 No touchesShouldBegin 不是 UIView 的委托,它继承自 UIScrollView developer.apple.com/library/ios/#documentation/UIKit/Reference/… 当然我创建了 UIGestureRecognizer。但问题是拥有 UITapGestureRecognizer 的 UIView 位于 UIScrollView 内部,并且 ScrollView 捕获了所有手势。通过覆盖方法 touchesShouldBegin,可以捕捉手势并将其提供给我的 UIView。但是我如何在拖动和点击之间做出决定呢?【参考方案3】:我假设您的意思是“单击”——您的 scrollView 属于绑定到您的控制器的 UIView。将点击手势识别器分配给该 UIView。它首先选择所有手势,然后传递它不感兴趣的手势。
【讨论】:
以上是关于UIScrollView 在拖动和点击之间做出决定的主要内容,如果未能解决你的问题,请参考以下文章