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 在拖动和点击之间做出决定的主要内容,如果未能解决你的问题,请参考以下文章

拖动包含 UIScrollView 的 UIView

UIScrollView 通过拖动到主视图

如何在 API 的 RPC 和 REST 之间做出决定?

ios模拟器:模拟滑动和拖动

UIScrollView 触摸处理

如何在开发 Web 应用程序和桌面应用程序之间做出决定 [关闭]