我有以下视图结构:

ScrollView A(水平)

  • ScrollView B(水平)
  • ViewC(集合视图)

  • ScrollView A在星期之间占据全屏和页面,ScrollView B是A的子视图,并且在几天之间也占据全屏和页面。
    这个想法是ScrollView B完全覆盖A,并处理所有分页,直到到达一周的开始或结束。那时,B无法滚动并继续前进,然后所有寻呼自动被A捕获,然后按周寻呼。
    所有这些都可以“即开即用”地工作,但是我有一个ViewC,它也是A的子视图(因此也可以被它分页),它“浮动”在scrollviewB上,因此不随它滚动。

    我的问题:ViewC是ScrollViewB的 sibling ,而不是孩子,因此(即使相对于z-index ScrollViewB位于其下方)在其上完成的滑动手势也传递给ScrollView A ...而我希望他们这样做传递给ScrollViewB。

    我该如何实现?
    谢谢!

    最佳答案

    如果我错了,请纠正我,但是如果ViewC是静态信息视图,那么它真的需要成为ScrollViewA的子视图吗?

    假设您的实现在没有ViewC的情况下工作(听起来应该如此),并且ViewC本身不需要任何交互,那么您应该能够使ViewC成为ScrollViewA的同级对象,并通过它将所有触摸传递给当前处于 Activity 状态的任何滚动视图根据您的逻辑。您可以通过子类化UIView并覆盖-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event以返回NO来实现此目的。

    编辑:

    鉴于静态视图确实具有自己的交互作用,听起来最好用子类UICollectionView替换ScrollViewB和ViewC。您可以将静态覆盖视图添加为子视图,并将其放置在layoutSubviews中。

    UICollectionView的另一个优点是,您可以使用scrollToItemAtIndexPath:atScrollPosition:animated:滚动到特定项目。取决于您对ViewC的实现方式以及它在经过哪一天时的通过方式,滚动到相应的日期应该很容易。

    就是说,听起来您已经完成了所有工作(除了叠加层),包括滚动到特定项目,因此,最好将UISCrollView子类化并将叠加层添加为子视图可​​能更好。这样,您就可以重用所有现有的逻辑,例如滚动到特定的日期,这应该可以解决滚动问题。

    关于ios - iOS-嵌套的ScrollViews并将手势传递给同级 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42894878/

    10-09 08:53