2011-07-14 50 views
0

在我的應用程序中存在一種特殊情況,我需要使用UIButton觸摸,並伴有類似於系統鍵盤上使用的咔嗒聲。UIButton觸摸點擊聲音 - 放在哪裏?

我現在正在做touceBegan:call - 我可以想到的最早的一個 - 但在很多情況下(特別是在較慢的設備上),聲音被延遲,整個點被錯過 - 用戶可能在聽到第一個聲音之前觸摸了另一個按鈕。

這不會發生系統鍵盤上,也不在我使用一些其他的應用程序發生,所以他們必須做正確的方式:-)

我應該在哪裏放置點擊代碼一旦用戶觸摸屏幕就會發出聲音?我寧願在沒有檢查自己是否在按鈕範圍內的地方這樣做,但如果這是唯一的選擇,那麼我願意這樣做。

是否使用創建聲音的方法?我現在使用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

感謝。雖然我沒有任何手勢識別器,但是使用控件事件確實解決了這個問題 - 但我必須使用UINTontrolEventTouchDown(如DarkDust建議的),而不是UIControlEventTouchUpInside。 –

+0

您可以更改爲UIControlEventTouchUp,而不是UIControlEventTouchUpInside ...使用UIControlEventTouchDown時,操作會快速調用,而使用UIControlEventTouchUpInside時,操作在用戶釋放手指時調用。 – Mat

1

如果您連接了UIGestureRecognizer,則可能會延遲touchesBegan:withEvent:調用。所以你必須確保視圖上沒有手勢識別器。您也可以使用addTarget:action:forControlEvents:事件UIControlEventTouchDown