如何在一个滚动视图中有多个滚动视图

Posted

技术标签:

【中文标题】如何在一个滚动视图中有多个滚动视图【英文标题】:How to have multiple scrollViews in one scrollView 【发布时间】:2012-05-23 16:08:14 【问题描述】:

我想要一个启用水平滚动的大滚动视图。在这个滚动视图中,我想拥有(比方说)5 个可以垂直滚动的其他滚动视图。

谁能指出我如何处理触摸事件的正确方向?

我正在考虑制作两个手势识别器(1 个用于点击,1 个用于平移)并使用 X 和 Y 值的增量来计算水平或垂直滑动。检查方向后,我将大滚动条或其中一个滚动条设置为启用或禁用。这是正确的方法吗?


编辑: 我没有使用上面的方法,而是通过将 5 个滚动视图添加为大滚动视图的子视图,将我的 5 个滚动视图(垂直滚动)添加到一个大滚动视图(水平)中。也许这段代码也可以帮助某人,因此也提供了示例代码。

for (int i = 0; i < NumberOfVerticalScrollers; i++) 
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;

        UIScrollView *scroller = [[UIScrollView alloc] initWithFrame:frame];
        scroller.directionalLockEnabled = YES;
        scroller.contentSize = CGSizeMake(320, 960);
        [self.scrollView addSubview:scroller];

self.scrollView.delegate = self;
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * NumberOfVerticalScrollers, self.scrollView.frame.size.height);

【问题讨论】:

【参考方案1】:

您只需要创建一个可以水平滚动的主滚动视图,并且只需要使用addSubView 方法在主滚动视图上添加其他滚动视图。 ios 处理所有必要的事件以正确处理滚动。您只需为每个滚动视图分配正确的content sizeframe

【讨论】:

【参考方案2】:

为此,您只需制作 1 个水平滚动视图,在其中添加其他垂直滚动视图作为子视图。要处理的大事是当基本滚动视图要水平滚动时,您应该禁用垂直滚动视图上的滚动。

你可以听:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

当这种情况发生时,您可以禁用垂直滚动视图上的滚动

然后您可以在下面启用向后滚动:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

【讨论】:

【参考方案3】:

我认为你不需要做任何花哨的事情。

see this question

在链接到该问题的示例中,如果您禁用缩放和弹跳,您应该会看到它可以正常工作。

【讨论】:

【参考方案4】:

有一个名为“Pulse”的应用程序使用垂直表格视图,其中每个表格视图单元格都可以水平滚动并包含另一个表格视图。这负责缓存和 UI 事件。 您需要找到一个示例并根据您的目的对其进行评估(可能将默认实现旋转 90 度)

How to recreate a Pulse-like UI?

【讨论】:

以上是关于如何在一个滚动视图中有多个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在放大滚动视图Objective-C时聚焦特定视图

滚动视图缩放问题

如何在 iOS 中获取多个滚动视图的索引

如何在滚动视图中进行多个表格视图

多个滚动视图?

如何同步容器内动态水平滚动视图的滚动视图位置?