UIScrollView - 确定滚动停止的位置

时间:2010-02-07 17:35:50

标签: iphone objective-c cocoa-touch uiscrollview

我正在试图弄清楚当用户进行滑动手势并且滚动视图进入减速时滚动视图将停止的位置。我正在尝试使用委托函数,但我无法准确地弄明白。请帮忙!

- (void) scrollViewDidScroll:(UIScrollView *)scrollView;
- (void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

5 个答案:

答案 0 :(得分:3)

这个帖子有点陈旧,但在寻找这个问题时仍然名列前茅。

UIScrollViewDelegate协议包含以下方法,告诉您的代码滚动视图应该停止的位置......

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

targetContentOffset参数是inout,因此如果将其设置为其他值,则scrollview将实际停在您指定的偏移处。

答案 1 :(得分:2)

不幸的是,UIScrollView不能以这种方式工作 - 没有办法预先确定减速结束的地方。

答案 2 :(得分:0)

听起来很复杂。用户可以在减速时再次开始滚动,突然停止或不停止滚动。也许你只需要完成DidEndDecelerating即可,即只是在滚动结束时检测位置?

答案 3 :(得分:0)

应该是简单的数学。每次调用scrollViewDidScroll时,都会更新scrollview的contentOffset属性。您只需要在两个位置之间保存矢量,并且至少需要时间来获得减速的下降终点位置。

请注意,当Jaanus指出时,用户可以通过点击滚动视图随时停止减速。

答案 4 :(得分:0)

UIScrollView实现中保留了当前加速的变量,但由于无法编译设备的代码,因此无法使用该变量作为解决方案。