2011-10-19 12 views
0

私はiPad用の描画アプリにジェスチャーを統合しようとしています。たとえば、3本の指をスワイプして描画ステップを元に戻したいとします。3本の指でスワイプして1回の指でスワイプしないようにタッチを遅らせる必要があります

タッチデータがtouchesBegan:withEventに移動しないようにする問題があります。これは、ジェスチャーを実行するときに画面に描画させる原因となります。

delayTouchesBeganプロパティを使用すると、3回の指のスワイプがこのタッチデータの配信を防止できます。しかし、ユーザーが左に描画された線を描画しようとしているときに描画を遅らせることもできます。この結果、ユーザーが描画を開始した場所から遠くに行が開始されます。

私のアプリが指を3回だけスワイプさせ、1回だけ指をスワイプさせないようにするにはどうすればよいですか?

UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)]; 

recognizer.numberOfTouchesRequired = 3; 
recognizer.direction = UISwipeGestureRecognizerDirectionLeft; 
recognizer.delaysTouchesBegan = YES; 

[self.view addGestureRecognizer:recognizer]; 

答えて

2

この問題の解決策を見つけました。ジェスチャ認識ツールのdelayTouchesBeganプロパティを使用する代わりに、さまざまなタッチメソッドに渡されたUIEventを使用してタッチ数を検出できます。次に、touchBegan:withEvent :, touchesMoved:withEvent :, touchesEnded:withEvent:1回のタッチがある場合にのみ実行するメソッドでアクションを制限します。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    //only process touch data if there is a single touch 
    if ([[event allTouches] count] == 1) { 
     //draw 
    } 
} 
1

これはジェスチャーに関する既知の問題です。そのまわりには方法がありません。それ以外の場合は、UISwipeGestureRecognizerをオプトアウトし、touchesBegan/Endedを使用して手動でジェスチャー処理を行います。次に、より低いしきい値でカスタムタイマーを設定することができます。

+0

これを設定する方法は分かりますか? – robhasacamera

+0

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html – logancautrell

+0

カスタムジェスチャー認識機能を設定する必要のないソリューションを発見しました。しかし、私はマルチタッチイベントの処理方法を理解するのに必要な情報をいくつか提供してくれてありがとうございました。 – robhasacamera

関連する問題