ios - 垂直 UIScrollView 优于水平 UIScrollView

标签 ios uiscrollview uigesturerecognizer horizontal-scrolling vertical-scrolling

iOS 8, swift 。 我试图在水平 ScrollView 上创建垂直 ScrollView 。它们都是 UIScrollView。垂直 ScrollView 允许从底部向上滑动 View 。顶部有一个使用自动布局的间隔 View ,宽度为 1 像素,但屏幕高度为 1 像素。

这可以正常工作,直到底层 View 本身是一个支持水平滚动的 ScrollView 。

我需要以某种方式将左/右平移手势传递给 UIScrollView subview 。

目前,顶层垂直 ScrollView 正在捕获所有手势,并且不允许底层水平 ScrollView 看到事件。

我尝试了 hitTest、gestureRecognizer 委托(delegate)方法、scrollview 子类化的各种组合,但提出了一个很好的干净解决方案。

当点击垂直 ScrollView 顶部的空白空间时,我可以使用 hitTest 将事件传递到底层水平 ScrollView ,但垂直 ScrollView 永远不会处理平移或向上滑动以显示应显示的内容向上滑动。

理想情况下,我希望顶部垂直 ScrollView 仅处理向上/向下平移,并在垂直 ScrollView 位于顶部时将左/右平移传递给 subview 。

最佳答案

以下是一个可能对您有所帮助的简短方法:

Obj-C:

创建不可见的 ScrollView ,然后根据覆盖两个底层 ScrollView 的顶部不可见 ScrollView 上的触摸事件的偏移量,将不可见 ScrollView 或触摸事件的偏移量传递给下面的 ScrollView :

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [_verticalScrollView setContentOffset:CGPointMake(0, _insivibleScrollView.contentOffset.y)];
    [_horizontalScrollView setContentOffset:CGPointMake(_insivibleScrollView.contentOffset.x, 0)];
}

您创建了一个不可见的 ScrollView ,所谓不可见,我的意思是您可能必须将 alpha 值保持在 0.01 左右。您不允许水平和垂直 ScrollView 的用户交互,而是使用上面的方法,以便当用户触摸不可见的 ScrollView 时,您将这些触摸转换到下面的 ScrollView ,这些 ScrollView 被锁定以仅响应偏移量不可见的 ScrollView 。正如您在评论中所述,这个答案可能有更多内容可以满足您的个人需求,但这是基本的“基础”,将为您提供您可能想要的效果。

swift :

与上面的方法相同,但这是您需要的函数:

func scrollViewDidScroll(scrollView: UIScrollView!) {
    verticalScrollView.contentOffset = CGPointMake(0, invisibleScrollView.contentOffset.y)
    horizontalScrollView.contentOffset = CGPointMake(invisibleScrollView.contentOffset.x, 0)
}

关于ios - 垂直 UIScrollView 优于水平 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062988/

相关文章:

swift - 点击手势不起作用。启用用户交互。

ios - 手势识别器不工作

ios - 单元格大小更改后,如何自动调整 CollectionViewCell 中内容的大小?

ios - 使用 SHA-1 是否被视为具有加密功能的应用程序?

ios - 如果在一定时间内未交互,则隐藏按钮

iphone - 未使用本地化的 xib 文件

iphone - 如何向 ScrollView 添加渐变?

ios - ScrollView 当键盘出现时不滚动 如果 ContentView 中的元素

swift - 仅当键盘处于事件状态时,点击背景才能关闭 TextField 键盘

ios - UIButton 在 uiscrollView 中不起作用