4

scrollView が上下にスクロールされているかどうかを調べたいと思います。理想的には、scrollView が上下にスクロールされた場合に呼び出しを 1 回だけ行いたいと考えています。私はこれを試しましたが、明らかに方向について何も教えてくれません:

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    NSLog(@"%.2f", scrollView.contentOffset.y);
}

contentOffset は常に 0 になります。上下にスクロールしても問題ありません。これで、 -(void)scrollViewDidScroll: オフセットが正か負かを簡単にチェックできますが、これは常に呼び出されます。scrollViewWillBeginDragging には、一度だけ呼び出されるという利点があり、これが必要です。scrollViewDidBeginDraggingのようなものはありますか? ドキュメントには何も見つかりませんでした。スマートな回避策はありますか?

4

4 に答える 4

12

初期コンテンツオフセットをに保存しますscrollViewWillBeginDragging:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    self.initialContentOffset = scrollView.contentOffset.y;
    self.previousContentDelta = 0.f;
}

そして、それぞれでそれをチェックしてくださいscrollViewDidScroll:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat prevDelta = self.previousContentDelta;
    CGFloat delta = scrollView.contentOffset.y - self.initialContentOffset;
    if (delta > 0.f && prevDelta <= 0.f) {
        // started scrolling positively
    } else if (delta < 0.f && prevDelta >= 0.f) {
        // started scrolling negatively
    }
    self.previousContentDelta = delta;
}
于 2012-04-06T18:01:20.773 に答える
4

スクロールscrollViewWillBeginDraggingが登録される前に、このチェックインを実行することは可能です。(IOS 5+)。スクロール ビューの組み込みのパン ジェスチャ レコグナイザーを調べることで、ジェスチャの方向を確認できます。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{ 
    CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];

    if(translation.y > 0)
    {
        // react to dragging down
    } else
    {
        // react to dragging up
    }
}

ユーザーが禁止された方向にドラッグしているときに、最初のドラッグ移動でスクロールをキャンセルするのに非常に便利であることがわかりました。

于 2013-10-16T19:48:32.147 に答える
2

宣言されたプロパティを作成して、テーブルビューがスクロールを開始していることを知らせます。という BOOL を使用しましょうscrollViewJustStartedScrolling

scrollViewWillBeginDraggingtrue に設定します 。

self.scrollViewJustStartedScrolling = YES;

scrollViewDidScrollのようなことを行います:

if (self.scrollViewJustStartedScrolling) {
    // check contentOffset and do what you need to do.
    self.scrollViewJustStartedScrolling = NO;
}
于 2012-04-06T17:48:14.297 に答える