我有以下 View 结构:
ScrollView A(水平)
- ScrollView B(水平)
- ViewC( Collection View )
ScrollView A在周之间占满屏和页,ScrollView B是A的 subview ,在天之间也占满屏和页。 这个想法是 ScrollView B 完全覆盖 A,并处理所有分页,直到达到一周的开始或结束。那时 B 无法滚动并进一步滚动,然后所有分页都会自动被 A 捕获,然后按周进行分页。 这一切都“开箱即用”,但我有一个 ViewC,它也是 A 的 subview (因此也被它分页),它“漂浮”在 scrollviewB 上,因此不会随它滚动。
我的问题:ViewC 是 ScrollViewB 的 sibling ,而不是子级,因此(即使相对于 z-index ScrollViewB 位于其下方)在其上完成的滑动手势会传递给 ScrollView A...而我会喜欢将它们传递给 ScrollView B。
我怎样才能做到这一点? 谢谢!
最佳答案
如果我错了请纠正我,但是如果 ViewC 是静态信息 View ,它真的需要是 ScrollViewA 的 subview 吗?
假设您的实现在没有 ViewC 的情况下工作(听起来应该如此),并且 ViewC 本身不需要任何交互,您应该能够简单地使 ViewC 成为 ScrollViewA 的兄弟,并将所有触摸通过它传递给任何 ScrollView 根据您的逻辑当前处于事件状态。您可以通过子类化 UIView 并覆盖 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
以返回 NO 来实现这一点。
编辑:
鉴于静态 View 确实有自己的交互,听起来您最好用子类化的 UICollectionView 替换 ScrollViewB 和 ViewC。您可以将静态覆盖 View 添加为 subview ,并将其放置在 layoutSubviews
中。
UICollectionView 的另一个优点是您可以使用 scrollToItemAtIndexPath:atScrollPosition:animated:
滚动到特定项目。根据您对 ViewC 的实现,以及它在点击哪一天时的传递方式,应该很容易滚动到相应的日期。
也就是说,听起来您已经完成了所有工作(叠加层除外),包括滚动到特定项目,因此您最好只继承 UISCrollView 并将叠加层添加为 subview 。这样您就可以重用所有现有逻辑,例如滚动到特定日期,它应该可以解决您的滚动问题。
关于iOS - 嵌套的 ScrollView 并将手势传递给同级 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42894878/