2014-03-05 77 views
0

如果我有一个UIScrollView在一个UIScrollView,但我只想所包含的滚动视图,以收到的事件和工作时偏移父滚动视图Y是0在滚动一个UIScrollView一个UIScrollView

怎样才能实现呢?

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

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

回答

0

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

这么长的故事,滚动视图中的滚动视图可能是一个坏主意,如果您不希望用户在两个滚动屏幕之间时将手指从屏幕上移开。

因此,不要打扰,请使用UICollectionView并精确定义应该如何处理每个节/页眉/页脚/行单元格。

所以我所做的只是在Collection Flow Layout中添加必要的属性更改,以确保正确处理所有部分和单元格。

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

0
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView //Or – scrollViewDidScroll: 
{ 
    if (scrollView==scrollViewA && scrollViewA.contentOffset.y == 0) 
    { 
      scrollViewB.userInteractionEnabled = YES; 
    } 
} 
+0

也许应该在父级滚动时禁用子级scrollView上的userInteraction?为了避免冲突? – Jissay

+0

这两个答案的工作原理除了一个简单的事实,这意味着我必须将手指从屏幕上取下,然后再次按下它以开始在其他UIScrollView中滚动。 本质上,当userInteractionEnabled变为YES时,UI停止工作,直到我再次开启/关闭手指。 –

+0

@DavidvanDugteren如果你不想抬起你的手指,你可以很容易地使用' - scrollViewDidScroll:'。 – Segev

0

据我所知,你不能在不同的scrollviews之间传输的第一反应,所以你就不必把你的手指,然后重新打开。

但是你可以做别的事情:

一旦你在你父母滚动视图达到Y = 0点,然后你可以使用touchesMoved事件以编程方式滚动鼠标滚动视图包含。

基本上,你会做一个命中测试,以确保触摸是在包含scrollView,检查容器scrollView contentOffset y位置是0,然后滚动你的容器scrollView。

喜欢的东西:

- (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 
     } 
    } 
} 

这段代码仅仅是一个样品,以便更好地理解我的意思。你应该根据自己的需要进行调整。

+0

好吧,这是有道理的,但我不明白如何知道在这一点上滚动内部滚动视图多少? 说我打电话,自我。innerscrollview setContentOffset(x,y)animated:NO]; 我不知道我应该如何在这里推导出y值。 UNless你说我可以简单地将touchesMoved params传递给它:self.innerscrollview touchesMoved:touches withEvent:event]; –

+0

scrollview不响应该选择器,因此您无法使用它。你必须做一些数学。计算原点(当您的内部scrollView变为活动状态时),然后通过移动多少来进行滚动。触摸NSSet中的触摸对象具有locationInView参数,可以帮助您做到这一点。还请查看文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UITouch_Class/Reference/Reference.html#//apple_ref/occ/cl/UITouch –