タッチ入力を機能させるために、MoveMe サンプルを使い始めました。
基本的に、タッチ入力を取得するために次の 2 つのコールバック関数を定義します。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for ( UITouch* touch in touches )
{
printf("touch down");
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for ( UITouch* touch in touches )
{
printf("touch up");
}
}
一度に画面に 5 回以上タッチするまで、これは問題なく機能します。その後、正常に動作しなくなります。画面に 5 回以上タッチしても、「タッチダウン」メッセージは表示されません。さらに悪いことに、画面からすべての指を離すまで、すべての「タッチアップ」メッセージを確実に取得することはできません。
6 本の指でタッチしてから 3 本を離し、残りの 3 本を下げたままもう一度タッチすると「タッチダウン」になりますが、離すと「タッチアップ」になる場合とそうでない場合があります。
これにより、タッチを追跡することがほとんど不可能になり、通常、Touch Manager に渡されると、タッチが永久に「立ち往生」してしまいます。
タッチ入力を取得するために使用するより良い API はありますか? 少なくとも、画面が現在タッチされているかどうかを確実に取得するために呼び出すことができる関数はありますか? そうすれば、すべての指が離されたときにマネージャーをリセットできます。
編集:
そうです、私が見逃しているものがあるに違いありません。現在、電卓は、これらのコールバックではできないことを行っているためです。
一度に 1 つのタッチしか受け付けず、画面に複数のタッチがある場合はすべてのタッチを「キャンセル」しますが、画面に「複数」のタッチがあることを知るためにそれらを追跡する必要があります。
画面に触れるとボタンが下がり、画面に別のタッチを追加すると、ボタンが解放され、クールになり、複数回のタッチは許可されません。ここで、さらに 4 本の指を画面に追加して合計 6 本の指を追加すると、画面が壊れます。これらの 6 本の指を離すと、アプリは「up」コールバックを取得しません。それでも、すべての指を離してもう一度タッチすると、ボタンが押し下げられるので、すべての指を離したことがわかります!! どうやって??