3

スクロールビューを特定の領域でのみスクロール可能にしようとしています。これを行うために、UIScrollViewをサブクラス化し、touchesBeganをオーバーライドしています(この質問と同様)。

これが私の(非常に単純な)コードです。

.h

 @interface SuppressableScrollView : UIScrollView
 @end

.m

#import "SuppressableScrollView.h"

@implementation SuppressableScrollView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesBegan touches=%@ event=%@", touches, event);
    [super touchesBegan:touches withEvent:event];
}

@end

touchesBeganは、UIScrollViewが通常は消費しないタッチ(タップなど)に対してのみ呼び出されます。すべてのタッチをインターセプトする方法はありますか?

どこかでコンセプトが欠けていると思います。

4

2 に答える 2

5

私は最近、UITableViewsに似たものを調べていました。UITableViewは、UIScrollViewの拡張です。その中を掘り下げてみると、UIScrollViewにスワイプなどを拾うための4つのジェスチャ認識機能が接続されていることがわかりました。ジェスチャ認識機能のプロパティをダンプして、自動的に作成されているものがあるかどうかを確認することをお勧めします(これは私が思うに)。その場合、私が考えることができる唯一のオプションはそれらを削除することですが、そうするとスクロールビューはジェスチャに応答しません。

したがって、おそらく、これらのジェスチャ認識機能とジェスチャ認識機能のデリゲートを調べて、接続するのに適した場所があるかどうかを確認する必要があります。

PSジェスチャ認識機能は、進行中のジェスチャを認識すると、イベントの嚥下を自動的に開始します。

于 2012-03-02T02:41:04.127 に答える
1

フレームサイズがコンテンツサイズよりも大きい場合、タッチ開始メソッドが起動しない場合があります。

タップでしか機能しないので、スクロールビューのコンテンツサイズが正しく設定されていないと思います。

于 2012-03-02T00:18:30.803 に答える