Check direction of scroll in UIScrollView Check direction of scroll in UIScrollView xcode xcode

Check direction of scroll in UIScrollView


In scrollViewWillBeginDragging the scroll view has not yet moved (or registered the move) and so contentOffset will by 0. As of IOS 5 you can instead look in the scrollview's panGestureRecognizer to determine the direction and magnitude of the user's scrolling gesture.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{     CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];    if(translation.x > 0)    {        // react to dragging right    } else    {        // react to dragging left    }}


Make a CGFloat lastOffset as a member variable in your class.h file..

then set it 0 in viewDidLoad .

then check in

        - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView    {    if (scrollView.contentOffset.x < lastOffset) // has scrolled left..    {         lastOffset = scrollView.contentOffset.x;        [self NextQuestion:scrollView];    }}


You can keep a starting offset as a member of your class which you store when the delegate receives the scrollViewDidBeginDragging: message.Once you have that value you can compare the x value of the scroll view offset with the one you have stored and see whether the view was dragged left or right.

If changing direction mid-drag is important, you can reset your compared point in the viewDidScroll: delegate method. So a more complete solution would store both the last detected direction and the base offset point and update the state every time a reasonable distance has been dragged.

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{    CGFloat distance = lastScrollPoint.x - scrollView.contentOffset.x;    NSInteger direction = distance > 0 ? 1 : -1;    if (abs(distance) > kReasonableDistance && direction != lastDirection) {        lastDirection = direction;        lastScrollPoint = scrollView.contentOffset;    }}

The 'reasonable distance' is whatever you need to prevent the scrolling direction to flip between left and right to easily but about 10 points should be about enough.