UISwipeGestureRecognizer 垂直于 UIWebView 滚动:如何避免对角滑动?

Posted

技术标签:

【中文标题】UISwipeGestureRecognizer 垂直于 UIWebView 滚动:如何避免对角滑动?【英文标题】:UISwipeGestureRecognizer perpendicular to UIWebView Scrolling: How to avoid diagonal swipes? 【发布时间】:2010-11-14 23:44:00 【问题描述】:

我正在编写一个 iPad 应用程序,其中我在 UIViewController 中大量使用了 UIWebView

我正在绑定一些动作来滑动手势识别器。他们检测左右滑动。由于我的 web 视图上下滚动,因此很容易尝试水平滑动并让 webview 向上或向下滚动一点,最终导致手势识别器失败。

那么有什么办法可以避免这种行为呢?也许是为了检测水平滑动的开始并锁定 UIWebView 垂直位置?

谢谢!

【问题讨论】:

【参考方案1】:

您可以拦截 continueTrackingWithTouch:withEvent 调用并有选择地返回 NO - 甚至可能取消滑动。

例如像

(BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event

    if (... too diagonal to my taste) .. 
          return (NO);
    return [super continueTrackingWithTouch:touch withEvent:event];

“太对角线”可以像检查开始点和当前点是否过于非正交一样简单(例如 dx = firstX - lastX, dy = firstY - lastY; len2 = dx * dx + dy * dy -仅允许相对于面积 = dx * dy 的某个比率。

谢谢,

Dw.

【讨论】:

麻烦的是,当 UISwipeGestureRecognizer 发现手势太对角时,它会自行取消跟踪。我想要完全相反。这个方法会覆盖自动取消吗? 否 - 因为上面的 [super ..] 仍将返回“否”。但是,您可能很顽皮-只需将上面的内容更改为始终返回“是”,然后看看会发生什么? 还是不行。我正在尝试一些替代方法,例如使用 UIScrollView 而不是手势识别。这给我带来了一些新问题,在此报告:***.com/questions/4200563/…。行为并不完全相同,但两者都代表了我迄今为止无法克服的一些挑战。所以我得继续努力。不管怎样,谢谢你的帮助,德克。

以上是关于UISwipeGestureRecognizer 垂直于 UIWebView 滚动:如何避免对角滑动?的主要内容,如果未能解决你的问题,请参考以下文章

识别用户剪切/滑动手势 (UISwipeGestureRecognizer)

UISwipeGestureRecognizer 滑动长度

UISwipeGestureRecognizer 只有一个方向工作

如何检测 UISwipeGestureRecognizer 的结束?

如何使 UISwipeGestureRecognizer 在 UIScrollView 中工作

UISwipeGestureRecognizer 没有触发