2

I have a UIScrollView inside that I have a UITableView The scroll view should scrol horizontally. And I have implemented - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView to do some tasks when the scroll view end its horizontal scrolling. But My problem is, this delegate is firing even when the UITableView vertical scrolling stopped too. So how can I detect just the scrollview horizontal scrolling within this delegate?

Please help me, Thanks

user1960169
  • 3,533
  • 12
  • 39
  • 61

2 Answers2

12

Check these delegate methods

CGPoint _lastContentOffset;

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  _lastContentOffset = scrollView.contentOffset;
}

  - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if (_lastContentOffset.x < (int)scrollView.contentOffset.x) {
      NSLog(@"Scrolled Right");
    }
    else if (_lastContentOffset.x > (int)scrollView.contentOffset.x) {
      NSLog(@"Scrolled Left");
    }

    else if (_lastContentOffset.y < scrollView.contentOffset.y) {
      NSLog(@"Scrolled Down");
    }

    else if (_lastContentOffset.y > scrollView.contentOffset.y) {
      NSLog(@"Scrolled Up");
    }
}
fatihyildizhan
  • 8,614
  • 7
  • 64
  • 88
DHEERAJ
  • 1,478
  • 12
  • 32
1

Swift version:

  var _lastContentOffset: CGPoint!

  func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
     _lastContentOffset = scrollView.contentOffset
  }

  func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    if _lastContentOffset.x < scrollView.contentOffset.x {
      NSLog("Scrolled Right")
    }
    else if _lastContentOffset.x > scrollView.contentOffset.x {
      NSLog("Scrolled Left")
    }

    else if _lastContentOffset.y < scrollView.contentOffset.y {
      NSLog("Scrolled Down")
    }

    else if _lastContentOffset.y > scrollView.contentOffset.y {
      NSLog("Scrolled Up")
    }
}
alamin39
  • 151
  • 1
  • 8