2011-07-19 15 views
2

アニメーションをトリガーする必要があるときにトリガーされるときに2つのジェスチャーレシーバーがあります。UIGestureRecognizerの完了後に実行

ジェスチャーが認識されたときに「はい」に設定される2つのブーリアンが1つずつあります。

私の問題は、あるレコグナイザでチェックを行い、他のレコグナイザがトリガされているかどうかを確認する必要があることです。

私は現在、右の認識装置については、以下の

[self registerRecognizer:swipeRecognizerRight 
     onRecognizedBlock:^(UIGestureRecognizer *recognizer) { 
    NSLog(@"pulled to right"); 
    leftPulled = TRUE; 

    if (rightPulled) { 
     [self->delegate executeActionString:someAnimation];  
    } 

    leftPulled = FALSE; 
}]; 

と同じことを行います。

leftPulledとrightPulledは、実際のオブジェクトです(左側が1つ、右側が1つ)。

私の問題は、一方の認識装置が他の認識装置の前に実行されるため、両方が認識されてアニメーションがトリガされることがないということです。

どうすれば解決できますか?何らかの種類のタイマー、または認識装置をコード化して、両方を同時に認識してアニメーションをトリガーする方法がありますか?

答えて

3

あなたはUIGestureRecognizerDelegateプロトコル方式では、私が考えるあなたの方法を見つける:あなたのケースでは

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)g1 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)g2; 

このメソッドは、2つのジェスチャーがで認識させるために、両方のケース(...:g1 ...:g2...:g2 ...:g1)でYESを返す必要があります同時に、g1またはg2で始まる。

+0

問題は、各レコグナイザが持つ完了ブロックです。 1つは他のものの前に完了し、私は補完ブロック以外のブール値をどこに設定するかはわかりません。それも可能ですか? 2つのジェスチャーが同時に認識されているときにアプリが欲しいので、私は何かを引き起こすことができます。 – user773578

+0

私は今理解しています。あなたがすべきこと私は、各ブロックの他のGRの 'state'プロパティをチェックしていると思います。もう一方の状態が 'UIGestureRecognizerStateRecognized'であれば、他のジェスチャーが認識されているかどうかを知ることができます。 –

+0

完了!!!!!!!!! – user773578

0

あなたの考えはおそらく正しいでしょう。私は非常に小さな遅延のため、より精度を持っていると信じて

int64_t threshold = 1000000; // In nanoseconds 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, threshhold),  
       dispatch_get_main_queue(), 
       ^{ leftPulled = FALSE; }); 

*:あなたは、しきい値期間を思い付くし、単にあなたのフラグをリセットするためにperformSelector:afterDelay:、またはGCD and a block *(SO質問へのリンク)を使用する必要がありますNSTimerよりも、私は確信していません。

関連する問題