web-dev-qa-db-ja.com

UITableViewがどのようにスクロールされているかを知る方法

UITableViewが上方向にスクロールされているのか下方向にスクロールされているのかを知る方法はありますか?

22
A for Alpha
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint currentOffset = scrollView.contentOffset;
    if (currentOffset.y > self.lastContentOffset.y)
    {
        // Downward
    }
    else
    {
        // Upward
    }
    self.lastContentOffset = currentOffset;
}
44
citydeer
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                    withVelocity:(CGPoint)velocity 
             targetContentOffset:(inout CGPoint *)targetContentOffset{

    if (velocity.y > 0){
        NSLog(@"up");
    }
    if (velocity.y < 0){
        NSLog(@"down");
    }
}
29
Alex

私たちはこれを好きにできますか?

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

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

    }
13
Ratha Hin

UITableViewUIScrollViewサブクラスであるため、自分をUIScrollViewDelegateとして設定し、スクロールビューデリゲートコールバックを取得できます。

これらのデリゲートメソッドの1つの引数(-scrollViewDidScroll:)はスクロールしたスクロールビューです。テーブルビューと比較して、スクロールしたのがどれであるかを知ることができます。


申し訳ありませんが、あなたの質問を読み間違えました。私はあなたが知りたいと思ったwhichテーブルビューがスクロールされている(私は「方法」を逃した)。

方向を知るには、前のオフセットを変数に保持し、デルタ(current.y-previous.y)が正(下にスクロール)か負(上にスクロール)かを確認します。

2

コンテンツオフセットの違いを追跡できます。古いものをメンバー/静的変数に保持し、現在のものと照合します。古い値が低い場合、スクロールは下向きになり、その逆も同様です。

1
Alexander
  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!")

        }
    }
1

このようにUIScrollViewのデリゲートメソッドを実装することでこれを行うことができます、それは優雅です。

PS:lastOffsetおよびscrollingUpwardはViewControllerのプロパティです。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint currentOffset = scrollView.contentOffset;
    self.scrollingUpward = currentOffset.y > self.lastOffset.y;
    self.lastOffset = currentOffset;
}
0
Mint
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
   if (yourTableView.isDragging || yourTableView.isDecelerating)
       {
                // your tableview is scrolled.
               // Add your code here
       }
}

ここでは、「yourTableView」の代わりにテーブルビュー名を置き換える必要があります。

yourTableView.isDragging-ユーザーがスクロールを開始した場合はYESを返します。これを開始するには、移動するのにある程度の時間や距離が必要になる場合があります。

yourTableView.isDecelerating-ユーザーがドラッグ(タッチアップ)していないが、スクロールビューがまだ移動している場合は、YESを返します。

0
dineshthamburu