LoginSignup
7
10

More than 5 years have passed since last update.

UITableView/UIScrollViewでスクロール直後のスクロール方向を取得する

Last updated at Posted at 2015-05-06

UIScrollViewの移動方向の取得というと、
scrollViewWillBeginDragging:contentOffsetCGPoint
scrollViewDidScroll時のcontentOffsetCGPointを比較して…
としている方が多いかと思います。

しかし、この方法ではただ方向が知りたいのにクラス内の変数が1つ増えてしまってなんかアレですよね…。

実は方向だけ取るならscrollViewWillBeginDragging:だけで取ることができます。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
    if(translation.y > 0){
        NSLog(@"down");
    }else{
        NSLog(@"up");
    }
}

scrollViewのプロパティにはpanGestureが仕込まれているのでそのままscrollViewとの相対位置を取ることができます。
このpanGestureに含まれる値はOSが初めてスクロールを検知した際の値が入るので、単純にUIScrollViewにタップした際の値は入りません。(scrollViewWillBeginDraggingがそういった仕様なので当然ですね)
そのため必ず最初に検知した方向を取ることが出来るのです。

*ただ注意しないといけないのは、これは最初の検知ということです。
ユーザーの動きを追跡しないので長くドラッグし続ける動作には向いていません。フリック等の検知に使うのが良いと思います。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10