【发布时间】:2015-11-10 20:00:47
【问题描述】:
iOS 8,斯威夫特。 我试图在水平滚动视图上拥有一个垂直滚动视图。它们都是 UIScrollView。垂直滚动视图允许从底部向上滑动视图。顶部有一个使用自动布局的间隔视图,宽度为 1 像素,但屏幕高度。
在底层视图本身是支持水平滚动的滚动视图之前,这可以正常工作。
我不知何故需要将左/右平移手势传递给作为 UIScrollView 的子视图。
目前,顶层垂直滚动视图正在捕获所有手势,而不是让底层水平滚动视图看到事件。
我尝试了各种 hitTest、gestureRecognizer 委托方法、滚动视图子类化组合,但我想出了一个不错的干净解决方案。
当点击垂直滚动视图顶部的空白区域时,我可以使用 hitTest 将事件传递给底层水平滚动视图,但随后垂直滚动视图从不处理平移或向上滑动以显示应显示的内容向上滑动。
理想情况下,我希望顶部垂直滚动视图仅处理向上/向下平移,并在垂直滚动视图位于顶部时将左/右平移传递给子视图。
【问题讨论】:
-
好的,触摸事件是个问题,是的,我没有时间详细说明我将如何解决这个问题,但我有一些提示给你,首先,将 drectionalLockEnabled 设置为 TRUE两个滚动视图,其次,在你的scrollviewDidScrollMethod中设置,你有没有试过这个,假设你甚至有1次触摸甚至通过: if (scrollView ==_verticalScrollView) { [_verticalScrollView setContentOffset:CGPointMake(0, scrollView.contentOffset.y)] ; } else{ [_horizontalScrollView setContentOffset:CGPointMake(scrollView.contentOffset.x, 0)];
-
还有一个想法,这就是我这样做的方法,是使用三个滚动视图,一个空且清晰的滚动视图位于其他两个滚动视图之上,这个滚动视图将允许向上移动向下和四周,然后你这样做: [_verticalScrollView setContentOffset:CGPointMake(0, _invisibleScrollView.contentOffset.y)]; [_horizontalScrollView setContentOffset:CGPointMake(_invisibleScrollView.contentOffset.x, 0)];当然,您不允许水平或垂直滚动视图上的触摸事件,只允许半不可见的顶部滚动视图,
-
部分问题是我不知道如何让顶部滚动视图有条件地将平移手势传递给底层水平滚动视图。如果我覆盖 hitTest,我可以使所有事件都转到较低的 SV,而没有转到较高的 SV。我需要有条件地让水平平移转到下部滚动视图。
-
我的意思是我认为你不需要,如果 TOP 不可见的 UIScrollView 拦截了所有事件,然后,在你的 ScrollViewDidScroll 中,你只需偏移水平滚动视图和顶部滚动视图的滑动方向的垂直滚动视图,这是一个讨厌的黑客,但它对我有用,启用顶部半隐形滚动方向锁定,然后将偏移量传递给其他滚动视图。在 ScrollViewDidScroll 中。我会 GIST 我的意思,一秒钟
标签: ios uiscrollview uigesturerecognizer horizontal-scrolling vertical-scrolling