iOS - 嵌套的 ScrollView 并将手势传递给同级 subview

标签 ios objective-c swift uiscrollview

我有以下 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/

相关文章:

swift - 错误: Instagram: Redirect URI does not match registered URI

swift - 自定义 NSError 怪异行为 Swift

ios - 在 iOS 中 WKWebView 的后台历史记录中显示带有父 URL 的子 URL

objective-c - 如何在 NSTableView 中重用单元格?

iphone - 在彼此下方添加多个 UILabel,每个标签具有可变行

ios - 将 Swift 与 AVPlayer 一起使用,如何通过代码添加和删除视频?

iphone - 如何将 wifi 网络添加到 iOS 的已知网络列表中?

ios - Storyboard共享约束常量

ios - 带约束的动画 UIView 框架

objective-c - AIR native 扩展 : Can I call ActionScript 3 method from C/Objective-C?