22

有什么方法可以知道 aUITableView是向上还是向下滚动?

4

8 回答 8

44
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint currentOffset = scrollView.contentOffset;
    if (currentOffset.y > self.lastContentOffset.y)
    {
        // Downward
    }
    else
    {
        // Upward
    }
    self.lastContentOffset = currentOffset;
}
于 2012-07-18T08:25:05.063 回答
29
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                    withVelocity:(CGPoint)velocity 
             targetContentOffset:(inout CGPoint *)targetContentOffset{

    if (velocity.y > 0){
        NSLog(@"up");
    }
    if (velocity.y < 0){
        NSLog(@"down");
    }
}
于 2014-01-21T16:40:08.570 回答
13

我们可以这样做吗?

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

      if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) {
        // down
      } else {
        // up
      }

    }
于 2013-09-19T06:32:12.890 回答
2

UITableView是一个UIScrollView子类,因此您可以将自己设置为UIScrollViewDelegate并获取滚动视图委托回调。

这些委托方法之一 ( -scrollViewDidScroll:) 的参数是滚动的滚动视图,您可以将其与表视图进行比较,以了解滚动的是哪一个。


对不起,我看错了你的问题。我以为您想知道正在滚动哪个表视图(我错过了“方式”)。

要知道方向,您可以将先前的偏移量保留在变量中,并查看增量(current.y - previous.y)是正数(向下滚动)还是负数(向上滚动)。

于 2012-07-18T08:19:54.483 回答
1

您可以跟踪内容偏移的差异。将旧的保留在成员/静态变量中并检查当前。如果旧值较低,则滚动向下,反之亦然。

于 2012-07-18T08:18:45.020 回答
1
  override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if targetContentOffset.memory.y < scrollView.contentOffset.y {
            //println("Going up!")

        } else {
           // println("Going down!")

        }
    }
于 2016-04-12T04:57:53.817 回答
0
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
   if (yourTableView.isDragging || yourTableView.isDecelerating)
       {
                // your tableview is scrolled.
               // Add your code here
       }
}

在这里,您必须替换您的 tableview 名称而不是“yourTableView”。

yourTableView.isDragging - 如果用户开始滚动,它返回 YES。这可能需要一些时间或距离才能开始。

yourTableView.isDecelerating - 如果用户没有拖动(触摸)但滚动视图仍在移动,则返回 YES。

于 2014-03-20T09:08:31.117 回答
0

您可以通过以这种方式实现UIScrollView的委托方法来做到这一点,它很优雅。

PS:lastOffset并且scrollingUpward是 ViewController 的属性。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint currentOffset = scrollView.contentOffset;
    self.scrollingUpward = currentOffset.y > self.lastOffset.y;
    self.lastOffset = currentOffset;
}
于 2016-03-18T03:25:02.600 回答