1

質問は単純ですが、非常に複雑ですUIResponder。タッチを処理する方法は 4 つあります。

- touchesEnded:withEvent:event
– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesCancelled:withEvent:

画面上でタッチが停止したかどうかを検出するにはどうすればよいですか?

問題は、静止したタッチで何かが移動したかどうかを検出する必要があることです (キャンセルまたは終了ではありません。移動しないだけです)。移動しないため、これらのメソッドはどれも呼び出されません。

私の考えはこれでした:

にタッチを追加することはできますNSMutableArrayが、その後、タッチの移動ごとに更新する必要があります (これはかなりの量です)。また、これによりさらに多くの問題が発生します。停止したタッチを検出し、終了したかどうかを検出する必要があります。そして、私はNSSetfromを取得するUIResponderので、整理された配列を持っていないので... あらゆる種類の問題があります。

アイデアお待ちしております。

4

2 に答える 2

1

私はそれを修正しました..そしてまた、本当にクールなことを見つけましたUITouch

私がしたこと:で

 – touchesBegan:withEvent:
for(UITouch*touch in touches){
[touchesSet addObject:touch]; } //touchesSet is a set that i store all the touches on the screen

- touchesEnded:withEvent:

for(UITouch*touch in touches){
[touchesSet removeObject:touch]; }

– touchesCancelled:withEvent:
[touchesSet removeAllObjects];

これを行うNSSetと、いつでも画面上のすべてのタッチを位置とUITouchPhase

于 2012-07-17T18:40:44.670 に答える
0

解決策は、何をしようとしているのかによって少し異なります(そして、どのようなビジネス上の問題やユーザーエクスペリエンスを目指しているのかを実際に説明することはありません)。ただし、継続的なジェスチャが一時停止したが完了していないことを検出しようとしていると仮定します。

touchesMoved最後に呼び出された場所と時刻を追跡することができます。たとえば、サブクラス化されたジェスチャレコグナイザーがCGPoint lastLocationある場合は、問い合わせ可能なプロパティまたはそのようなものを指定します。

次に、一定時間後にトリガーされるNSTimerをセットアップして、「停止」状態をテストできます。たとえば、NSTimerが0.1秒ごとに呼び出され、場所の変更がない場合、たとえば1秒間待機している場合、それは停止状態と見なされます。

また、「静止したタッチで何かが動いた」かどうかを確認したい場合は、これをNSTimerルーチンに追加できます。

于 2012-07-15T18:42:14.137 に答える