Cancel UIScrollView bounce after dragging

后端 未结 2 1287
傲寒
傲寒 2020-12-18 03:57

I have a horizontal UIScrollView. I want to do a variation of the \"pull-to-reset\" animation, where I pull all the way past the right edge of the scroll view\'s content siz

相关标签:
2条回答
  • 2020-12-18 04:28

    I accomplished cancelling the bounce back animation of a UIScrollView.

    I wanted to leave the default behaviour during a rapid scroll to the top when it bounces. However if scrollview is already at the top and then the user pulls it down and releases (analogous to pull to refresh) I wanted to take the control over the bounce back and do something custom.

    In scrollview delegate I track the initial position:

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

    In scrollview delegate detect if the flag is set and scrollview is dragged enough

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

    I subclass scrollview and override the setContentOffset:

    -(void)setContentOffset:(CGPoint)contentOffset
    {
        if (!overrideBounce)
        {
            [super setContentOffset:contentOffset];
        }
        else
        {
            //customs stuff goes here , for example an animation
            overrideBounce = NO;
        }
    }
    
    0 讨论(0)
  • 2020-12-18 04:35

    try this

    - (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];
      }
    }
    
    0 讨论(0)
提交回复
热议问题