Cancel UIScrollView bounce after dragging

后端 未结 2 1296
傲寒
傲寒 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;
        }
    }
    

提交回复
热议问题