拖动后取消UIScrollView反弹

我有一个水平的UIScrollView。 我想做一个拉动到重置animation的变体,在这个animation中,我一直拉过滚动视图的内容大小的右边缘,释放我的手指,并让滚动视图飞回(0,0 )内容偏移。

我的委托方法如下所示:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { //check if it exceeds a certain critical value if (scrollView.contentOffset.x - (scrollView.contentSize.width - IMAGE_WIDTH) > 80) { [self doAnimatedScrollTo:CGPointMake(0, 0)]; } } 

doAnimatedScrollTo:是一个自定义的animation方法,因为我想控制animation的持续时间。

虽然这样做,似乎animation排队了。 UIScrollView“反弹”animation首先发生,然后我的animation发生。

有没有办法取消反弹animation,保持内容偏移“alignment”回来,然后执行我的animation?

尝试这个

 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { //check if it exceeds a certain critical value if (scrollView.contentOffset.x - (scrollView.contentSize.width - IMAGE_WIDTH) > 80) { [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; } } 

我完成了取消UIScrollView的反弹animation。

我想在退回时快速滚动到顶部时保持默认行为。 然而,如果scrollview已经在顶部,然后用户拉下来,释放(类似拉动刷新),我想控制反弹,做一些自定义的东西。

在scrollview委托我跟踪的初始位置:

 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { if (scrollView.contentOffset.y < 0.1) { isPullingTop = YES; } } 

在scrollview委托检测是否设置标志和足够的滚动视图

 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if (isPullingTop && scrollView.contentOffset.y < -30) { overrideBounce = YES; } isPullingTop = NO; } 

我子类scrollview并重写setContentOffset:

 -(void)setContentOffset:(CGPoint)contentOffset { if (!overrideBounce) { [super setContentOffset:contentOffset]; } else { //customs stuff goes here , for example an animation overrideBounce = NO; } }