2

2つのタッチを検出するようにオーバーライドUIGestureRecogniserされていますが、必ずしも次々と続くとは限りません。

私は持っています:

- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer
{
    if ([preventingGestureRecognizer isKindOfClass:[UIRotationGestureRecognizer class]])
    {
        self.state = UIGestureRecognizerStateCancelled;
        return YES;
    }

    if ([preventingGestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]])
    {
        self.state = UIGestureRecognizerStateCancelled;
        return YES;
    }

    //Will prevent a conflict with a 2 finger touch only.   
    if ([preventingGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
    {
        if (preventingGestureRecognizer.numberOfTouches == 2)
        {
            self.state = UIGestureRecognizerStateCancelled;
            return YES;
        }  
        return NO;
    }
    self.state = UIGestureRecognizerStateRecognized;
    return NO;
}

私のMVCには、RotationGestureRecogniserもあります。私の問題は、それらが競合していることです。私のdoubleTapジェスチャ認識機能は@selector、上記の方法で防止する必要があるときにそのアクションを呼び出しています。

上記のメソッドは呼び出されていないようです。これは、2本の指が触れて回転を実行すると、次のコードが表示されるためだと思います。

- (void)secondTouchRecived
{
    self.state = UIGestureRecognizerStateRecognized;
}

アクションメソッドを呼び出し、UIGestureResponders防止メソッドをバイパスします。に変更してみましたUIGestureRecogniserStateBeganが、これも防止方法を迂回しているようです。

4

1 に答える 1

1

カスタムジェスチャレコグナイザーのrequireGestureRecognizerToFail:に回転、スワイプ、タップジェスチャレコグナイザーを渡して依存関係を指定するのはどうですか?これにより、回転認識機能がタッチを処理する機会を得る前に、ジェスチャー認識機能が認識状態に移行するのを防ぐことができます。

于 2012-06-19T17:38:26.880 に答える