4

ユーザーがuiviewに触れるとサウンドの再生を開始し、ユーザーが画面上で指をスライドさせると別のトーンに変化するアプリケーションがあります。ユーザーが指を離すと音が止まります。

これには、touchesBegan、Moved、およびEndedイベントを使用しています。

私の問題は、タッチが終了した(および/またはキャンセルされた)ことが適切に起動されず、指を画面から離した後もサウンドが再生され続けることです。

そのため、回避策として、画面のタッチ数をチェックするタイマーを実装します。タイマーがゼロの場合は、再生中にオーディオプレーヤーをチェックして停止します。

私は私に次のようなタッチの数を得ることができるいくつかのコードを探していました

UITouch * touches = [self getAllTouchesonScreen];

か何か :)

4

3 に答える 3

3

TouchesEndedイベントが発生しない場合があります。

タッチがキャンセルされ、タッチが終了したイベントのブレークポイントを設定しようとしましたが、ヒットしない場合があります。

Apple WebサイトのGLPaintサンプルプログラムを試して、終了したトーチでNSLogを試して、画面上でいくつかの高速描画を実行し、画面から指を離すように指をすばやく持ち上げます。

あなたは私が何を意味するかを知っているでしょう。これに対する私の現在の解決策は、加速度計を含みます:)

ヒント:これを使用してすべてのイベントを検索します:(void)sendEvent:(UIEvent *)event

于 2010-04-19T06:20:30.940 に答える
3
NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
    UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
    if([touch phase] != UITouchPhaseCancelled)
    {
        CGPoint touchPoint = [touch locationInView:self];
        //do something with touchPoint that has state [touch phase]
    }
}

このコードは、すべてのタッチイベント関数(touchesBegan、touchesEnded、touchesMoved)で使用でき、タッチをカウントしてその状態を知ることができます。

于 2010-06-01T16:25:13.510 に答える
1

touchesCanceledを忘れないでください。この関数/メソッドを追加し、タッチがそこに到達したときにNSLogします。いくつかの欠落したタッチが見つかると思います。

タップカウント(指をあまり動かさずに同じ場所を複数回タップする)を探している場合は、次の方法で取得できます。

-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];

ただし、touchesMovedを使用して手動で実行し、FARがどのように移動したかを確認し、タップのいずれかが移動しすぎた場合にタップを2倍または3倍にする機能をキャンセルし、有効なタップ状態にある限りタップをカウントします。

于 2010-07-07T10:25:51.650 に答える