取消UIScrollView的反弹后,拖动(Cancel UIScrollView bounce a

2019-07-19 23:18发布

我有一个水平的UIScrollView。 我想这样做“拉至复位”的动画,在这里我拉一路过去滚动视图的内容大小的右边缘的变化,释放我的手指,并有滚动视图飞回(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:因为我想控制动画的持续时间是一个自定义动画方法需要。

虽然这个工作,它似乎动画排队。 该UIScrollView的“反弹”的动画时,再我的动画出现。

有没有办法取消弹跳动画,保持内容从“噼噼啪啪”回偏移,然后执行我的动画?

Answer 1:

试试这个

- (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];
  }
}


Answer 2:

我完成取消超生一个UIScrollView的动画。

我想要一个快速滚动时留下的默认行为顶端时,它反弹。 但是,如果滚动型已经在顶部,然后将用户拉下来,并发布(类似于拉刷新)我想接管反弹控制回来,做一些定制。

在滚动视图委托我跟踪的初始位置:

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

在滚动视图的委托检测是否设置了标志和滚动型拖到足够

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (isPullingTop && scrollView.contentOffset.y < -30) {

        overrideBounce = YES;
    }
    isPullingTop = NO;
}

我继承滚动视图并覆盖setContentOffset:

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


文章来源: Cancel UIScrollView bounce after dragging