3

パン、タップ、スワイプのジェスチャを処理する必要があるビューがあります。パンとタップは機能していますが、スワイプを追加すると機能しません。不思議なことに、タップを外すとスワイプが正常に機能するため、タップがスワイプをブロックしているようです。ジェスチャ認識エンジンを作成する方法は次のとおりです。

- (void) initGestureHandlers
{
    UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeftGesture:)];
    swipeLeftGesture.numberOfTouchesRequired = 1;
    swipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    [self addGestureRecognizer:swipeLeftGesture];

    UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRightGesture:)];
    swipeRightGesture.numberOfTouchesRequired = 1;
    swipeRightGesture.direction = UISwipeGestureRecognizerDirectionRight;
    [self addGestureRecognizer:swipeRightGesture];

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    [tapGesture setNumberOfTapsRequired:1];
    [self addGestureRecognizer:tapGesture];

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [self addGestureRecognizer:panGesture];
}

多くのブログで、requireGestureRecognizerToFail を使用して、ダブルタップが発火する前にタップが発火するケースを処理することが提案されているので、それを試してみましたが、これも機能しませんでした。

    [tapGesture requireGestureRecognizerToFail:swipeLeftGesture];
    [tapGesture requireGestureRecognizerToFail:swipeRightGesture];

同じビューでタップとスワイプを行うにはどうすればよいですか?

4

2 に答える 2

7

コメントするか、行を削除します

 //[tapGesture requireGestureRecognizerToFail:swipeLeftGesture];
 //[tapGesture requireGestureRecognizerToFail:swipeRightGesture];

また、すべてのゲスト オブジェクト デリゲートを自分自身に設定します。このような

- (void) initGestureHandlers
{
    UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeftGesture:)];
    swipeLeftGesture.numberOfTouchesRequired = 1;
    swipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    swipeLeftGesture.delegate = self;
    [self addGestureRecognizer:swipeLeftGesture];

    UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRightGesture:)];
    swipeRightGesture.numberOfTouchesRequired = 1;
swipeRightGesture = self;
    swipeRightGesture.direction = UISwipeGestureRecognizerDirectionRight;
    [self addGestureRecognizer:swipeRightGesture];

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    [tapGesture setNumberOfTapsRequired:1];
    [self addGestureRecognizer:tapGesture];
tapGesture.delegate = self;

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [self addGestureRecognizer:panGesture];
panGesture.delegate = self;
}

このようにデリゲートメソッドを実装します

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
于 2013-05-21T12:32:56.240 に答える