如何检测scrollView的滚动方向?

Posted

技术标签:

【中文标题】如何检测scrollView的滚动方向?【英文标题】:How to detect scrollView scrolling direction? 【发布时间】:2015-10-05 04:03:36 【问题描述】:

我有一个UIScrollView 里面有一个UITableView 滚动视图应该水平滚动。我已经实现- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 在滚动视图结束其水平滚动时执行一些任务。但我的问题是,即使UITableView 垂直滚动也停止了,这个代表也会触发。那么我怎样才能检测到这个委托中的scrollview 水平滚动呢?

请帮帮我, 谢谢

【问题讨论】:

【参考方案1】:

检查这些委托方法

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");
    

【讨论】:

【参考方案2】:

Swift 版本:

  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")
    

【讨论】:

在代码中添加一些解释总是好的 :)

以上是关于如何检测scrollView的滚动方向?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断 UIScrollView 的方向是要滚动的?

如何检测滚动嵌套scrollview android在底部的位置?

如何确定垂直 ScrollView 的方向?

Android:检测 ScrollView 何时停止滚动

ScrollView与ListView的冲突

Scrollview 只检测特定区域的滚动?