【问题标题】:Scrolling a UIScrollView in a UIScrollView在 UIScrollView 中滚动 UIScrollView
【发布时间】:2014-03-05 09:03:27
【问题描述】:

如果我在 UIScrollview 中有一个 UIScrollView,但我只希望包含的滚动视图接收事件并在父滚动视图 Y 偏移量为 0 时工作。

如何实现这一点?

警告我没有提到,使用 self.ptViewController.collectionView.userInteractionEnabled = YES;

没有帮助,因为事件不会开始传递到滚动视图,直到用户释放他们的手指,大概是由于 FirstResponder 的变化。

【问题讨论】:

    标签: objective-c uiscrollview


    【解决方案1】:
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView //Or – scrollViewDidScroll:
    {
        if (scrollView==scrollViewA && scrollViewA.contentOffset.y == 0) 
        {
                scrollViewB.userInteractionEnabled = YES;
        }
    }
    

    【讨论】:

    • 也许在父滚动时禁用子滚动视图上的 userInteraction 也应该完成?为了避免冲突?
    • 这两个答案都有效,除了一个简单的事实,这意味着我必须将手指从屏幕上移开,然后再次按下它才能开始在另一个 UIScrollView 中滚动。本质上,当 userInteractionEnabled 变为 YES 时,UI 会停止工作,直到我再次打开/关闭手指。
    • @DavidvanDugteren 如果您不想抬起手指,可以轻松使用– scrollViewDidScroll:
    • @Segev,我不关注,请解释一下?我看不出这有什么帮助。
    【解决方案2】:

    据我所知,您无法在不同的滚动视图之间转移第一响应者,因此您不必再松开手指。

    但是你可以做其他事情:

    在父滚动视图中到达 y=0 点后,您可以使用 touchesMoved 事件以编程方式滚动包含的滚动视图。

    基本上,您会进行命中测试以确保触摸在包含的滚动视图中,检查容器滚动视图 contentOffset y 位置是否为 0,然后滚动您的容器滚动视图。

    类似:

    - (void) touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event 
    {
      if (scrollViewContainer.contentOffset.y == 0) 
      {
          if ([self hitTest:[[touches anyObject] locationInView:containedScrollView] withEvent:nil])
          {
              //programatically scroll your contained scrollView
          }
      }
    }
    

    此代码只是一个示例,可以更好地理解我的意思。您应该根据自己的需要进行调整。

    【讨论】:

    • 好吧,这有点道理,但我不明白此时如何知道内部滚动视图滚动多少?说我打电话,self.innerscrollview setContentOffset(x,y) animated: NO];我不知道我应该如何在这里推断出 y 值。除非你说我可以简单地将 touchesMoved 参数传递给它: self.innerscrollview touchesMoved: touches withEvent: event];
    • scrollview 不响应该选择器,因此您无法使用它。你必须做一些数学运算。计算原点(当你的内部滚动视图变为活动状态时),然后滚动它移动了多少。 touches NSSet 中的触摸对象具有 locationInView 参数,可以帮助您解决此问题。还可以查看文档:developer.apple.com/library/ios/documentation/uikit/reference/…
    【解决方案3】:

    所以,在尝试了其他建议之后,我发现我无法复制无缝滚动所需的流动性,就好像它是一张桌子一样。

    长话短说,如果您不希望用户在两者之间滚动时将手指从屏幕上移开,那么滚动视图中的 Scrollview 可能不是一个好主意。

    因此,不要打扰,使用 UICollectionView 并精确定义每个部分/页眉/页脚/行单元格的处理方式。

    所以我所做的只是在集合流布局中添加必要的属性更改,以确保正确处理所有部分和单元格。

    由于我试图实现流布局的性质,需要大量数学和代码来确保处理所有约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 2013-11-15
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多