2011-12-20 37 views
0

我想做一個播放聲音文件(非常簡短的嘟嘟聲)並等待時間等於延遲時間然後重複的循環,此循環運行,直到我點擊暫停按鈕,等待時間延遲可以通過滑塊按鈕來改變循環正在運行。如何在每次迭代中檢查新的IBAction輸入?

- (void)playSound 
{ 

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/Metronome-Sound.mp3", [[NSBundle mainBundle] resourcePath]]]; 
NSError *error; 
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 

audioPlayer.numberOfLoops = 0; 
[audioPlayer play]; 
} 

- (IBAction)playSelected:(UIButton *)sender 
{ 
if (stateOfMetronome == 0){ 
    stateOfMetronome = 1; 
    while (stateOfMetronome == 1){ 
     [self playSound]; 
     [NSThread sleepForTimeInterval:delay]; 
    } 
} 
} 


- (IBAction)pauseSeleted:(UIButton *)sender 
{ 
if (stateOfMetronome == 1){ 
    stateOfMetronome = 0; 
    [audioPlayer pause]; 
} 
} 

回答

2

實現這個最無痛的方法我認爲是使用NSTimer設置重複。當您需要停止/暫停時,只需使計時器無效。當你想啓動它時,只需重新初始化它。使用這種方法,您可以輕鬆控制何時觸發延遲以及輕鬆定製間隔。

另外,請記住,睡覺時可能會阻止所有UI交互。這可能意味着當線程睡着時,您無法播放/暫停,因爲睡眠時沒有循環處理。請參閱NSThread的詳細信息。

+0

是的,請使用NSTimer。輪詢循環是邪惡的。 – sosborn 2011-12-21 00:00:10

+0

我剛開始爲iPhone開發,所以看起來我有一些學習要做。謝謝。 – currentoor 2011-12-21 01:56:30