2012-02-09 3 views
0

私は複数のタッチで簡単なアプリケーションを構築しようとしています。私はiOSとobjectivec/cocoaの初心者です。だから質問がとてもばかげているなら、ごめんなさい。touchBegin、touchEnd iPhone/iPadアイデンティティ

リリースされたフィンガーまたはすべてのフィンガーをユーザーが解放した後で、アクティブなフィンガー数を知りたい。私は注意したい、私は指がリリースされた正確に知る必要があります。最初の一見ではすべてが簡単だと思われますが、実際には問題が発生しています(

私は同時に3本の指を画面に置いて、しばらくしてから4本目の指を付けます。この場合、私のUIView.mファイルでは2つの 'touchesBegan' evensが呼び出されました。 最初のイベントではタッチの回数が3となり、2回目のタッチで= 4となります(これは合計ですカウンター)。このイベントは、すべてが明らかであるように思わ持つようにします。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSSet *allTouches = [event allTouches]; 
    NSArray *allObjects=[allTouches allObjects]; 
    touchCount = [NSNumber numberWithInt:[allObjects count]]; // this is my main counter of current active touches. 
    NSLog(@"%d", touchCount.intValue); 
} 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    //what I should do ???? 
} 

のは、4つの部分に画面を分割してみましょう。iPadの画面上で4つの四角形を想像してみてください。

そして、この四角形の4つのブール変数を作成しましょう。 4つの四角形のすべてのステータスをストアする予定でしたか?デフォルトでは、すべての変数はfalseになります。

bool rectangle1 = false; 
bool rectangle2 = false; 
bool rectangle3 = false; 
bool rectangle4 = false; 

その後、指が下がると、 'touchesBegan'イベントでブール変数を変更します。どの変数を変更すべきか私はx-y座標で分かっています。だから私は矩形#2に私の指を置いて、次に私は矩形#4に別の指を置くとしましょう。この場合、変数は次のようになります。

bool rectangle1 = false; 
bool rectangle2 = true; 
bool rectangle3 = false; 
bool rectangle4 = true; 

これ以降、矩形#4から1本の指を離しています。だから、これは最初からリリースされた指であった「touchesEnded」イベントで私がどのように知ることができるのは、四角形#4の領域にあったのだろうか?

答えて

1

カスタムコードを書く代わりに、このクラスを代わりに使用することを強くお勧めします。UIGestureRecognizer、あなたが望むものを達成するための具体的な実装があります。

0

UIGestureRecognizersは間違いなく正しいアプローチです。私はそれをさらに進めて、各四角形にそれ自身のジェスチャー認識機能を持たせるか、少なくとも、独自のtouchesBeganとtouchesEndedの実装を持たせます。

長方形間の調整がさらに必要な場合は、ビューコントローラのジョブにする必要があります。矩形は必要に応じてView Controllerに通知できます。

0

UITouchは、タッチの現在および以前の位置を決定する2つの方法:locationInView:およびpreviousLocationInView:を持っています。これらの方法は、touchesMoved:withEvent:への呼び出しの間に接触の「同一性」を確立する唯一の信頼できる方法を提供します。 locationInView:によって返された値を追跡し、previousLocationInView:によって返された値へのそれ以降の呼び出しでそれを比較することで、あなたが見ている「どの」タッチを明白に確立できます。

あなたがやろうとしていることが、UIGestureRecognizerで行えるかどうかを判断するのに十分な情報を提供していませんでしたが、可能であれば、扱いやすくなります。

+0

ありがとう、私はピアノロールを構築しようとしています。 – user1195202

関連する問題