8

ビューをスワイプするたびに、ビューの半分のサイズの2つのサブビューが追加されるモジュールを作成しています。これらのサブビューには独自のジェスチャがあります (例: パンなど)。初めてスワイプするときは、サブビューが作成されていないので問題ありません。ただし、サブビューが作成されると、スワイプするたびに、スワイプジェスチャが常にそのサブビューに渡されます。:(なので、分割するには2回スワイプする必要があります。

サブビューへのスワイプパスをブロックする方法はありますか? ありがとうございました。

更新
shouldRecognizeSimultaneouslyWithGestureRecognizer を使用して、これらのジェスチャを同時に機能させました。しかし、まだいくつかの問題があります。親ビューにはスワイプ ジェスチャがあり、サブビューにはパン ジェスチャがあります。私は souldRecognizeSimultaneouslyWithGestureRecognizer を使用しているため、パンしているときにスワイプ ジェスチャがトリガーされます。この状況でパンがアクティブなときにスワイプを無効にする方法を知っていますか?

4

6 に答える 6

14

UIGestureRecognizerDelegate メソッドを実装する必要があります。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

そして、コントローラーをジェスチャ認識エンジンのデリゲートとして追加します。次に、2 つのジェスチャ レコグナイザーがジェスチャに応答すると、このメソッドが呼び出され、ここでアプリに必要なロジックを実装できます。

コントローラーのインターフェイス宣言では、次のように入力する必要があります。

@interface testcViewController () <UIGestureRecognizerDelegate>

次に、ジェスチャ認識エンジンを作成するとき:

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe)];
swipe.direction = UISwipeGestureRecognizerDirectionDown;
swipe.delegate = self;
[self.view addGestureRecognizer:swipe];

そして最後に、このメソッドをコントローラーに追加します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    BOOL shouldInteract = NO;
    //Here you decide whether or not the two recognizers whould interact.
    return shouldInteract;
}

EDIT 実装することもできます

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

ここで、サブビューを既に表示しているかどうかを検出し、必要なジェスチャをブロックします。

于 2013-06-07T09:07:40.350 に答える
2

userinteractionEnabled を subView の NO に設定します

 subview.userinteractionEnabled=NO

userInteraction を無効にしたくない場合は、cancelsTouchesInViewメソッドを使用します

cancelsTouchesInView — ジェスチャ レコグナイザーがジェスチャを認識すると、そのジェスチャの残りのタッチをビューからバインド解除します (したがって、ウィンドウはそれらを配信しません)。ウィンドウは、以前に配信されたタッチを (touchesCancelled:withEvent:) メッセージでキャンセルします。ジェスチャ レコグナイザーがそのジェスチャを認識しない場合、ビューはマルチタッチ シーケンスのすべてのタッチを受け取ります。

于 2013-06-07T08:40:28.487 に答える
1

このようにしてみて、

   - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return NO;
}
于 2013-06-07T08:44:58.997 に答える