16

スクロール ビューがバウンスしているかどうかをテストするにはどうすればよいですか? バウンスが終わったら通知とかあるの?

4

7 に答える 7

34

スクロールビューが水平方向にバウンドしているかどうかを検出した方法は次のとおりです。

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

  if (scrollView.contentOffset.x < 0) {
    NSLog(@"bouncing left");
  }

  if (scrollView.contentOffset.x > (scrollView.contentSize.width - scrollView.frame.size.width)) {
    NSLog(@"bouncing right");
  }
}
于 2012-01-26T22:23:58.120 に答える
7

はい... UIScrollViewDelegate 仕様を確認し、以下の 2 つを含むメソッドを実装し、それに応じて UIScrollView のデリゲートを設定します。

// User stops dragging the table view.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
    willDecelerate:(BOOL)decelerate;

// Control slows to a halt after the user drags it

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

おそらく、scrollViewDidEndDecelerating に最も関心があるでしょう。これらは、私が最初に見つけたUITableViewでも機能します(UITableViewはUIScrollViewを継承しています)。

于 2010-05-18T04:43:26.137 に答える
1

ビューのコンテンツを更新するために、スクロールビューで下に「跳ねる」ことができる人のために。(そして、イベントは 1 回だけ発生します。)

- (void)scrollViewDidEndDragging:(UIScrollView *)aScrollView
                  willDecelerate:(BOOL)decelerate{

    CGPoint offset = aScrollView.contentOffset;
    CGRect bounds = aScrollView.bounds;
    CGSize size = aScrollView.contentSize;
    UIEdgeInsets inset = aScrollView.contentInset;
    float y = offset.y + bounds.size.height - inset.bottom;
    float h = size.height;

    //Distance in points before update-event occur
    float reload_distance = 50;
    //
    if(y > h + reload_distance) {
        NSLog(@"load more rows");
    }
}
于 2013-07-25T14:02:36.847 に答える
0

Glavidの回答を使用して、バウンスをボトムにも追加し、カテゴリとして追加しました

#import "UIScrollView+Additions.h"

@implementation UIScrollView (Additions)

- (BOOL)isBouncing
{
    BOOL isBouncingBottom = self.contentOffset.y >= self.contentSize.height - self.frame.size.height
        && self.contentSize.height >= self.frame.size.height;
    BOOL isBouncingTop = self.contentOffset.y <= 0;

    BOOL isBouncing = isBouncingBottom || isBouncingTop;
    return isBouncing;
}

@end
于 2016-03-23T11:17:48.067 に答える