UITableView
が上方向にスクロールされているのか下方向にスクロールされているのかを知る方法はありますか?
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint currentOffset = scrollView.contentOffset;
if (currentOffset.y > self.lastContentOffset.y)
{
// Downward
}
else
{
// Upward
}
self.lastContentOffset = currentOffset;
}
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset{
if (velocity.y > 0){
NSLog(@"up");
}
if (velocity.y < 0){
NSLog(@"down");
}
}
私たちはこれを好きにできますか?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) {
// down
} else {
// up
}
}
UITableView
はUIScrollView
サブクラスであるため、自分をUIScrollViewDelegate
として設定し、スクロールビューデリゲートコールバックを取得できます。
これらのデリゲートメソッドの1つの引数(-scrollViewDidScroll:
)はスクロールしたスクロールビューです。テーブルビューと比較して、スクロールしたのがどれであるかを知ることができます。
申し訳ありませんが、あなたの質問を読み間違えました。私はあなたが知りたいと思ったwhichテーブルビューがスクロールされている(私は「方法」を逃した)。
方向を知るには、前のオフセットを変数に保持し、デルタ(current.y-previous.y)が正(下にスクロール)か負(上にスクロール)かを確認します。
コンテンツオフセットの違いを追跡できます。古いものをメンバー/静的変数に保持し、現在のものと照合します。古い値が低い場合、スクロールは下向きになり、その逆も同様です。
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!")
}
}
このようにUIScrollView
のデリゲートメソッドを実装することでこれを行うことができます、それは優雅です。
PS:lastOffset
およびscrollingUpward
はViewControllerのプロパティです。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint currentOffset = scrollView.contentOffset;
self.scrollingUpward = currentOffset.y > self.lastOffset.y;
self.lastOffset = currentOffset;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if (yourTableView.isDragging || yourTableView.isDecelerating)
{
// your tableview is scrolled.
// Add your code here
}
}
ここでは、「yourTableView」の代わりにテーブルビュー名を置き換える必要があります。
yourTableView.isDragging-ユーザーがスクロールを開始した場合はYESを返します。これを開始するには、移動するのにある程度の時間や距離が必要になる場合があります。
yourTableView.isDecelerating-ユーザーがドラッグ(タッチアップ)していないが、スクロールビューがまだ移動している場合は、YESを返します。