如何在一个滚动视图中有多个滚动视图
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 size
和frame
。
【讨论】:
【参考方案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?
【讨论】:
以上是关于如何在一个滚动视图中有多个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章