UIScrollView 子视图中的水平 UISwipeGestureRecognizer ? (UIScrollView 只需要识别垂直滚动)

Posted

技术标签:

【中文标题】UIScrollView 子视图中的水平 UISwipeGestureRecognizer ? (UIScrollView 只需要识别垂直滚动)【英文标题】:Horizontal UISwipeGestureRecognizer in subview of UIScrollView ? (UIScrollView only needs to recognize vertical scrolling) 【发布时间】:2012-12-12 19:51:03 【问题描述】:

我有一个 UIScrollView,我在其中添加了一个子视图。滚动视图可以很好地垂直滚动,这就是它应该做的。我现在想在 UISwipeGestureRecognizer 的帮助下识别子视图中的左/右滑动。我知道这是可能的,但我还没有找到解决方案,并且多次尝试均未成功。

【问题讨论】:

【参考方案1】:

试试这些:

设置你的UIGestureRecognizer的代表和

实现shouldRecognizeSimultaneouslyWithGestureRecognizer:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
return YES;

实现shouldReceiveTouch:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

 return YES;

希望对你有帮助

【讨论】:

不,我之前尝试过,但没有成功:(。我认为 UIScrollView 只会吞下检测到的每一个拖动。 你确定你实现了 shouldRecognizeSimultaneouslyWithGestureRecognizer 而不仅仅是 shouldReceiveTouch? 您是否检查过您的委托方法是否被调用? 是的,我确实实现了-shouldRecognizeSimultaneouslyWithGestureRecognizer::,但奇怪的是他们没有被调用... 您是否正确设置了代理?您是否将gestureRecognizer 添加到UIScrollView?【参考方案2】:

我能够使用新的 ios 7 UIGestureRecognizerDelegate 方法完成一些相关的事情(直接在滚动视图上添加两指滑动手势识别器):

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
        shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    return otherGestureRecognizer == scrollView.panGestureRecognizer;

但是,结果并不完美 - 等待滑动手势识别器首先失败的延迟会导致滚动视图的平移手势识别器延迟,因此当您开始滚动时,正常滚动会明显延迟。

【讨论】:

以上是关于UIScrollView 子视图中的水平 UISwipeGestureRecognizer ? (UIScrollView 只需要识别垂直滚动)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UIScrollView 布局 - 设置水平内容大小并水平调整子视图大小

具有水平缩放的 UIScrollView - 在子视图中绘制的贝塞尔路径模糊

UIScrollView 没有将触摸传递给子视图?

在 UITableViewCell 内水平滚动 UIScrollView

UITableViewCell 内的 UIScrollView - 水平滚动

UIScrollView 删除子视图动画