如果我有一个UIScrollView在一个UIScrollView,但我只想所包含的滚动视图,以收到的事件和工作时偏移父滚动视图Y是0在滚动一个UIScrollView一个UIScrollView
怎样才能实现呢?
警告我没有提到,使用self.ptViewController.collectionView.userInteractionEnabled = YES;
没有帮助,因为事件没有开始传递到滚动视图,直到用户释放他们的手指,大概是由于FirstResponder中的更改。
如果我有一个UIScrollView在一个UIScrollView,但我只想所包含的滚动视图,以收到的事件和工作时偏移父滚动视图Y是0在滚动一个UIScrollView一个UIScrollView
怎样才能实现呢?
警告我没有提到,使用self.ptViewController.collectionView.userInteractionEnabled = YES;
没有帮助,因为事件没有开始传递到滚动视图,直到用户释放他们的手指,大概是由于FirstResponder中的更改。
因此,在尝试其他建议后,我发现我无法复制所需的流畅性,无缝滚动,就好像它是一张桌子一样。
这么长的故事,滚动视图中的滚动视图可能是一个坏主意,如果您不希望用户在两个滚动屏幕之间时将手指从屏幕上移开。
因此,不要打扰,请使用UICollectionView并精确定义应该如何处理每个节/页眉/页脚/行单元格。
所以我所做的只是在Collection Flow Layout中添加必要的属性更改,以确保正确处理所有部分和单元格。
由于我试图实现流布局的性质,需要大量的数学和代码来确保处理所有约束。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView //Or – scrollViewDidScroll:
{
if (scrollView==scrollViewA && scrollViewA.contentOffset.y == 0)
{
scrollViewB.userInteractionEnabled = YES;
}
}
据我所知,你不能在不同的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
}
}
}
这段代码仅仅是一个样品,以便更好地理解我的意思。你应该根据自己的需要进行调整。
好吧,这是有道理的,但我不明白如何知道在这一点上滚动内部滚动视图多少? 说我打电话,自我。innerscrollview setContentOffset(x,y)animated:NO]; 我不知道我应该如何在这里推导出y值。 UNless你说我可以简单地将touchesMoved params传递给它:self.innerscrollview touchesMoved:touches withEvent:event]; –
scrollview不响应该选择器,因此您无法使用它。你必须做一些数学。计算原点(当您的内部scrollView变为活动状态时),然后通过移动多少来进行滚动。触摸NSSet中的触摸对象具有locationInView参数,可以帮助您做到这一点。还请查看文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UITouch_Class/Reference/Reference.html#//apple_ref/occ/cl/UITouch –
也许应该在父级滚动时禁用子级scrollView上的userInteraction?为了避免冲突? – Jissay
这两个答案的工作原理除了一个简单的事实,这意味着我必须将手指从屏幕上取下,然后再次按下它以开始在其他UIScrollView中滚动。 本质上,当userInteractionEnabled变为YES时,UI停止工作,直到我再次开启/关闭手指。 –
@DavidvanDugteren如果你不想抬起你的手指,你可以很容易地使用' - scrollViewDidScroll:'。 – Segev