2012-01-14 7 views
1

私のiPhoneアプリのUIには、ボタンとタッチジェスチャ認識機能を受け入れる別のimageViewがあり、両方ともターゲットアクションがあります。一度にボタンとビューを1つずつタッチすると、すべてが問題ありません。しかし、私がこれらの2つに同時に触れたり、急速に連続したりすると、物事が乱れることがあります。ボタンとジェスチャーハンドラは同じ状態変数を操作するため、並べて実行すると結果は非決定的になります。iOSでは、GestureRecogizerのターゲットアクションが別のスレッドで実行されていますか?

私はジェスチャー認識ハンドラに入った瞬間にボタンを無効にし、ハンドラを終了する直前にこれを有効にしてこの問題を解決しようとしました。しかし、これは私の問題を解決しません!

唯一の可能性(私の推測)は、ボタンハンドラが実行されているときにジェスチャ認識プログラムがトリガされることです。しかし、これは別々のスレッドに存在する場合にのみ発生します。ジェスチャー認識ハンドラーが別のスレッドで実行されているかどうかは誰にも分かりますか?あるいは、私の問題にもっと具体的には、自分の状況で何をすべきですか?衝突を防ぐためにガード変数を使用しますか?

+0

を実装したクラスでこのコードを入れて、あなたはハンドラの両方からのコードのいずれかを投稿することができますか? – reddersky

+0

私は問題を理解しました:ボタンイベントが無効になる前に発生するので、ボタンと画像を同時にタップすると、ボタンを無効にすることは役に立ちません。私のジェスチャーハンドラーは1秒後に何かをするためにタイマーを使用するので、ボタンハンドラーが呼び出されて処理が間違ってしまいます。私はこれを解決するためにガード変数を使用することになります。 しかし、ここでも問題は残っていますが、ジェスチャー認識ハンドラがメインのUIや別のスレッドと同じスレッドで呼び出されるかどうかは誰にも分かりません。 。 – NeoWang

+0

メインのUIスレッドで呼び出されます。 – reddersky

答えて

0

ジェスチャー認識のデリゲート

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }

関連する問題