0

UIGestureRecognizerをuiview階層の奥深くに配置しましたが、トリガーされていません。ビューの一般的なマップは次のとおりです。

UIScrollView> UIView> UIView> UIView> UIView

最後のビューにはジェスチャレコグナイザーがあります。

- (id)initWithFrame:(CGRect)frame {    
    self = [super initWithFrame:frame];

    if (self) {
        self.userInteractionEnabled = TRUE;

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
        [self addGestureRecognizer:tap];
        [tap release];
    }  

    return self;
}

- (void)tap:(UIGestureRecognizer *)recognizer {
    NSLog(@"tap");
}

canCancelContentTouchesジェスチャが伝播できるようにスクロールビューのを設定しています。

ジェスチャを使用してビューをスクロールビューの真下に移動すると、機能します。なぜそれが深い階層で機能しないのか誰かが説明できますか?

ありがとう!

4

1 に答える 1

0

このような階層では、タッチするポイントはビューフレームとすべての親フレーム内にある必要があります。レスポンダーチェーンはスクロールビューで始まり、タッチがスクロールビューの外側にある場合はそこで停止します。次に、スクロールビューの直接の子などをチェックします。

そうでない場合は、最後のフレームがヒットしたかどうかを確認して返すために、独自のヒットテスト関数を作成することをお勧めします。

于 2011-07-29T12:03:54.070 に答える