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