ios在两个uiscrollview之间移动触摸事件

Posted

技术标签:

【中文标题】ios在两个uiscrollview之间移动触摸事件【英文标题】:ios move touch event between two uiscrollview 【发布时间】:2013-09-10 00:43:14 【问题描述】:

我正在构建一个由UITableViewUIScrollView 组成的ios 布局。 UIScrollView 位于UITableView 的表格单元格内,可以水平和垂直滚动。下图显示了这种情况。如果用户开始在UIScrollView 上向下/向上滚动,则滚动事件应该触发表格视图的setContentOffset,而不是滚动视图的setContentOffset,而滚动视图的顶部将在虚线上(它是恒定高度)。然后滚动触摸事件应该为滚动视图触发setContentOffset,而不是表格视图。

在另一种情况下:当用户开始在表格视图上滚动时,它应该为表格视图触发setContentOffset,直到滚动视图到达虚线。然后滚动视图应该处理setContentOffset

我的问题是如何在一个滑动动作期间在表格视图和滚动视图之间传输触摸事件。

【问题讨论】:

【参考方案1】:

这听起来像是您想要一些非常具体和自定义的情况之一。因此,试图用手势识别器做一些聪明的事情是不够的。

主要问题是您可以控制手势识别器的方式,例如 gestureRecognizer:shouldReceiveTouch:gestureRecognizerShouldBegin: 仅影响手势的开始(或对于新的触摸,而不是正在进行的触摸),但您需要一个正在进行的手势在控制每个视图之间进行转换。因此,出于这个原因,我认为您需要在整个屏幕上放置一个大的透明视图,并在其上放置一个平移手势识别器,并在您的 handlePan 方法中决定您要调整哪个视图,然后直接在该视图上调用 setContentOffset。您可以使用平移识别器的翻译和现有的内容偏移量来计算新的。我知道这不是很优雅,但我想不出另一种方法来达到你想要的效果。

【讨论】:

【参考方案2】:

我不确定这是否可行,但您可以尝试这样做:

    选项

    self.scrollView.panGestureRecognizer = self.tableView.panGestureRecognizer;

    选项

    [self.scrollView addGestureRecognizer:self.tableView.panGestureRecognizer];

    选项

    [self.tableView.panGestureRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];
    

【讨论】:

以上是关于ios在两个uiscrollview之间移动触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

触摸开始后 UIScrollview 位置移动

iPhone SDK UIScrollView 移动后没有触摸事件

iOS - UIScrollView hitTest 不包含触摸

UIScrollview touchesbegin,touchesmoved,touchesendactions

iOS:使用 2 个手指时取消 UIScrollView 触摸

UiScrollview scrollviewDidScroll 检测用户触摸