UIScrollViewの移動方向の取得というと、
scrollViewWillBeginDragging:
のcontentOffset
のCGPoint
と
scrollViewDidScroll
時のcontentOffset
のCGPoint
を比較して…
としている方が多いかと思います。
しかし、この方法ではただ方向が知りたいのにクラス内の変数が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
がそういった仕様なので当然ですね)
そのため必ず最初に検知した方向を取ることが出来るのです。
*ただ注意しないといけないのは、これは最初の検知ということです。
ユーザーの動きを追跡しないので長くドラッグし続ける動作には向いていません。フリック等の検知に使うのが良いと思います。