如何在一个scrollView中有多个scrollView

时间:2012-05-23 16:08:15

标签: iphone touch scrollview gesture

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

有人能指出我如何处理touchevents的正确方向吗?

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


编辑: 我没有使用上面的方法,只是通过添加5个scrollview作为大视图的子视图,我只能在一个大的scrollview(水平)中添加我的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);

4 个答案:

答案 0 :(得分:1)

要做到这一点,您需要简单地制作1个水平滚动视图,在其中添加其他垂直滚动视图作为子视图。要处理的重要事情是当基本滚动视图要水平滚动时,您应该禁用垂直滚动视图上的滚动。

你可以听:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

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

在以下内容中,您可以启用向后滚动:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

see this question

在该问题中链接的示例中,如果禁用缩放和弹跳,您应该看到它只是有效。

答案 3 :(得分:0)

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

How to recreate a Pulse-like UI?