3

我想要一个启用水平滚动的大滚动视图。在这个滚动视图中,我想拥有(比方说)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);
4

4 回答 4

1

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

您可以收听:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

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

在以下您启用回滚:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
于 2012-05-23T16:33:30.930 回答
1

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

于 2012-05-23T16:48:02.730 回答
0

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

看到这个问题

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

于 2012-05-23T16:30:37.660 回答
0

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

如何重新创建类似 Pulse 的 UI?

于 2012-05-23T16:37:38.187 回答