我在谷歌上做得够多了,在发布这篇文章之前,我确实在stackoverflow中检查了像这样的帖子( Finding the direction of scrolling in a UIScrollView? )。我有一个动态数量的照片在一个iPhone应用程序,这是通过UIScrollView
显示。在任何时候,我只有3张照片显示在滚动视图中。当我有,比如说4张照片,总共:第一张照片:显示在偏移320.0处第二张照片:显示在偏移320.0处第三张照片:显示在偏移640.0处
现在,当用户滚动到第四张照片时,滚动视图将重置为0.0偏移量。如果用户试图滚动“超越”第四张照片,滚动应该只在正确的方向上停止(这样用户就不会滚动“超越”)。但目前,用户“能够”滚动到最后一张照片之外;然而,我通过编程检测到了这一点&重置了偏移量。但它看起来并不整洁,因为用户会立即看到黑色背景。我想要检测到用户已经开始在scrollViewWillBeginDragging
中滚动“右”(记住,滚动“左”即到“上一张”照片就可以了),这样我就可以停止向右滚动了。
我尝试过的:
self.scrollView.panGestureRecognizer
的translationInView
不起作用,因为最初没有返回panGestureRecognizer
实例(!),尽管UIScrollView API声称是这样。scrollViewDidEndDecelerating
中检测到这一点,尽管它不能满足我的目的。<代码>G212
发布于 2012-12-27 14:01:49
谢谢你克里斯。最后,这就是对我有效的方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// Detect the scroll direction
if (lastContentOffset < (int)scrollView.contentOffset.x) {
...
}
}
发布于 2013-10-16 19:44:38
在检查滚动视图的panGestureRecognizer
时,我在scrollViewWillBeginDragging
中确定方向没有问题
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
if(translation.y > 0)
{
// react to dragging down
} else
{
// react to dragging up
}
}
当用户在禁止的方向上拖动时,我发现它在第一次拖动移动时取消滚动非常有用。
发布于 2017-02-28 09:27:51
Swift 3解决方案
1-添加UIScrollViewDelegate
2-添加此代码
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
let actualPosition = scrollView.panGestureRecognizer.translation(in: scrollView.superview)
if (actualPosition.y > 0){
// Dragging down
}else{
// Dragging up
}
}
https://stackoverflow.com/questions/14042203
复制相似问题