2011-07-14 7 views
0

私のアプリには、UIButtonのタッチがシステムのキーボードで使用されているのと同様のクリック音を伴って必要とする特別な状況があります。UIButtonタッチで音をクリック - どこに配置しますか?

私は考えることができる最も初期のものですが、それでもかなりの場合(特に遅いデバイスの場合)、音が遅れて全体のポイントが逃してしまいます。最初の音が聞こえる前にユーザが別のボタンに触れた可能性があります。

これは、システムのキーボードでは発生しません、またそれは、私が使用しているいくつかの他のアプリで起こるんので、彼らはそれを私がクリックコードを置くべき

:-)正しい方法をやっている必要がありますユーザーが画面に触れるとすぐに音が鳴りますか?私はむしろ、タッチがボタンの境界内にあるかどうかを自分で確認する必要はない場所でそれを行うだろうが、これが唯一の選択肢であれば、私はそれをやりたい。

サウンドの作成に使用される方法はありますか?私は今、最も簡単な方法であるAudioServicesPlaySystemSoundを使用しています。

ありがとうございました。

答えて

5

DarkDust氏によると、なぜaddTarget:action:forControlEvents:を使用しないのですか?私にとって

が正常に動作します:

[button addTarget:self action:@selector(playClick) forControlEvents:UIControlEventTouchUpInside]; 

-(IBAction)playClick{ 
    NSString *effect; 
    NSString *type; 
    effect = @"Tink"; 
    type = @"aiff"; 
    SystemSoundID soundID; 
    NSString *path = [[NSBundle mainBundle] pathForResource:effect ofType:type]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    AudioServicesCreateSystemSoundID ((CFURLRef)url, &soundID); 
    AudioServicesPlaySystemSound(soundID); 
} 
+0

感謝を。私はジェスチャーレコグナイザーを持っていませんが、コントロールイベントを使用して問題を解決しましたが、UIControlEventTouchUpInsideではなく、DarkDustが示唆するようにUIControlEventTouchDownを使用する必要がありました。 –

+0

UIControlEventTouchUpInsideの代わりにUIControlEventTouchDownに変更することができます。UIControlEventTouchDownを使用すると、アクションはすぐに呼び出され、UIControlEventTouchUpInsideでは、ユーザーが指を離したときにアクションが呼び出されます。 – Mat

1

UIGestureRecognizerが接続されている場合、touchesBegan:withEvent:コールが遅れることがあります。したがって、ジェスチャ認識機能が表示されていないことを確認する必要があります。

addTarget:action:forControlEvents:とイベントUIControlEventTouchDownを使用することもできます。

関連する問題