【发布时间】:2014-04-18 14:08:00
【问题描述】:
所以我意识到嵌套滚动视图是一个危险信号,但是除了一个小问题之外,所有的当前设置实际上都运行良好。一个滚动视图管理在集合中的滚动,而另一个处理整个集合视图的缩放和平移。这一切都有效,但小问题来自放大和向下平移时,滚动视图在集合视图滚动时平移,导致视图滚动速度翻倍,并且感觉不到手指连接。
我最理想的情况是在可以平移时垂直滚动由外部滚动视图管理,然后当外部滚动视图无法再平移时由内部滚动视图处理。我写了这样的东西非常接近:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == _outerScrollView) {
CGPoint offset = _outerScrollView.contentOffset;
CGFloat height = _outerScrollView.frame.size.height;
CGFloat contentHeight = _outerScrollView.contentSize.height;
ScrollDirection scrollDirection;
if (offset > _lastContentOffset){
scrollDirection = ScrollDirectionUp;
} else {
scrollDirection = ScrollDirectionDown;
}
BOOL scrollIsAtTop = offset.y <= 0;
BOOL scrollIsAtBottom = offset.y + height >= contentHeight;
//If there is a pan upward and we aren't at the top of the outer
//scrollview cancel the gesture on the inner view
//downward vice versa
if (!((scrollIsAtTop && scrollDirection == ScrollDirectionUp)
|| (scrollIsAtBottom && scrollDirection == ScrollDirectionDown))) {
_innerCollectionView.panGestureRecognizer.enabled = NO;
_innerCollectionView.panGestureRecognizer.enabled = YES;
}
}
_lastContentOffset = offset.y;
}
这个几乎有效,一个副作用是当它到达底部时大平底锅向下停止,并要求用户开始一个新的手势来继续滚动内部集合。理想情况下,这种过渡会很顺利,但我很难找到一种方法来做到这一点。我再次意识到滚动视图中的滚动视图并不理想,但如果我能解决这个小问题,一切都会好起来的,而不是尝试重新设计整个事情。
关于如何以一种让平移手势获胜的方式处理双滚动,但当外部滚动视图不能再垂直平移时干净地过渡到内部集合的任何想法?
【问题讨论】:
-
您有可以快速制作的视频吗?或者压缩项目?
-
不容易,如果我不能很快找到修复程序,我可以制作一个重现它的演示项目,但这需要我一个小时左右,所以我会继续努力,看看是否在此期间,任何人都有任何好的建议。
-
你有没有想过这个问题?我目前有同样的问题。
-
@ArtSabintsev 我确实想出了一个最终奏效的(有点糟糕的)解决方案,我会发布并回答它的样子。
-
谢谢!我在嵌套的 UICollectionView 和它的 UIScrollView 超级视图之间有整个橡皮筋问题。我做了或多或少和你一样的事情,这让我感到安慰,我走在正确的轨道上,而且不是世界上唯一遇到这个烦人问题的人 :)
标签: ios objective-c uiscrollview uicollectionview uipangesturerecognizer