拖动后取消 UIScrollView 弹跳

Posted

技术标签:

【中文标题】拖动后取消 UIScrollView 弹跳【英文标题】:Cancel UIScrollView bounce after dragging 【发布时间】:2013-02-15 11:05:17 【问题描述】:

我有一个水平的 UIScrollView。我想做一个“pull-to-reset”动画的变体,我一直拉到滚动视图内容大小的右边缘,松开手指,让滚动视图飞回 (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“反弹”动画首先出现,然后我的动画出现。

有没有办法取消反弹动画,保持内容偏移从“捕捉”回来,然后执行我的动画?

【问题讨论】:

您是否尝试取消选中属性检查器上的反弹属性? @jcesar nope,因为我想要明确地反弹属性。我只是不想执行动画的第二半——即。 “反弹”。 那我觉得不可能。如果您使用反弹,则必须使用完全反弹。也许如果你创建一个子类,你可以改变完整的动画 【参考方案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];
  

【讨论】:

【参考方案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;
    

【讨论】:

以上是关于拖动后取消 UIScrollView 弹跳的主要内容,如果未能解决你的问题,请参考以下文章

问题:UIScrollview 弹跳使父 UIScrollview 弹跳

UIScrollview 弹跳和缩放固定顶部

放大时只允许 UIScrollView 缩放弹跳,不能缩小

UIScrollView 在内容小于视图大小时反弹

UIScrollView :仅向左水平分页,向右弹跳

允许 UIScrollView 滚动过去的内容而不弹跳