两个重叠的 UIScrollView 可以同时处理一个事件吗?

Posted

技术标签:

【中文标题】两个重叠的 UIScrollView 可以同时处理一个事件吗?【英文标题】:Can two overlapping UIScrollView both handle an event? 【发布时间】:2013-06-14 14:44:00 【问题描述】:

编辑:感谢所有试图提供帮助的人,我试图重用两个 UIScrollView 以节省一些时间。但似乎 UIScrollView 方法不会为我节省任何时间,所以我完全手动编写视图。

我有两个 UIScrollView,一个只能水平滚动,一个垂直滚动,它们在屏幕的一部分重叠。

----- | | | | | | | | |--+---+----------| | |一个 | | |--+---+----------| | | | | -----

我想要一个滚动视图来处理区域“A”中的水平滑动手势,而另一个滚动视图处理垂直滑动手势,但我似乎无法让它工作。

有人知道如何解决这个问题吗?

【问题讨论】:

我认为顶部的视图总是会吞下事件,但是如果它是垂直的,您可以尝试自己将触摸事件从顶部视图发送到另一个视图 @MarkE 是的,我知道,我试图在父视图的hitTest 和基于此的bringSubviewToFront 中检测“垂直”或“水平”运动,但我无法做到正常工作 不要使用bringSubviewToFront使用,[scrollView setContentOffset:CGPointMake(x, y) animated:NO];在读取前面视图上的触摸数据时移动另一个视图 @MarkE 我不明白这应该如何工作,上视图不应该向下视图的方向滚动(反之亦然),添加了一个 ASCII 绘图以试图澄清什么我的意思是 在我看来,最简单的方法是在它们之上设置一个视图,该视图会消耗所有触摸事件(或仅具有运动的事件),然后告诉相应的滚动视图您的触摸移动了很多在 x 方向上,在 y 方向上也是如此。 【参考方案1】:

在获取触摸事件并在另一个滚动视图上手动调用它们的滚动视图中处理 touchesBegan、touchesMoved 和 touchesEnded 是否有效?

您还可以通过处理滚动视图中的滚动视图委托来滚动另一个滚动视图。

【讨论】:

【参考方案2】:

我有类似的问题。有 2 个 UIScrollView 完全重叠,并且由于滚动另一个而需要滚动其中一个。

搜索了一段时间后,我在这里找到了类似的帖子:

answer

为我完成了这项工作:)

【讨论】:

这是一个不同的问题,两个滚动视图相互匹配;而我的问题是让他们独立移动,但每个方向都不同。但是由于您最终遇到了您的问题,我想其他有类似问题的人也可以,所以这可能对他们有帮助:) 嗯,这可能是一个好的开始。剩下要做的就是计算第一个的移动与第二个的大小之间的比率(与第一个的大小相比)。但是,您已经解决了您的问题(根据您在问题中的评论),因此它确实可能对某人有所帮助:)

以上是关于两个重叠的 UIScrollView 可以同时处理一个事件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android高德地图重叠,切换闪烁

如何一键同时控制两个 UIScrollView?

同时滚动两个 UITableView 时 UIScrollView 不流畅?

UIScrollView 与其他 UIElement 重叠,因此它们不再可点击

WPF中如何实现重叠的按钮点击事件同时触发

UIScrollView 的同时滚动