2011-12-20 4 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

+0

iPhone向けに開発を始めたばかりなので、やっているように見えます。ありがとうございました。 – currentoor

関連する問題