2011-05-23 65 views
1

我正在嘗試設置通過UISwitch啓用的秒錶警報。我希望在定時器啓動後的x秒後觸發警報。我有一個ivar int變量(timerCount),它保存已經過去的秒數,我想根據那個ivar播放聲音。當計時器開始時,我啓用開關,我希望玩家在10秒內開火,但事實並非如此。我知道「if語句」是罪魁禍首,因爲當我刪除它時,AVPlayer將在啓用開關時播放wav文件。我只需要另一組眼球就可以看到這個並找出我錯過的東西。 這裏是代碼片段:提示AVAudioPlayer基於定時器播放

- (IBAction)timerSound{ 

    if (voiceSwitch.on){ 

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"horn" 
                 ofType:@"wav"]; 

    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath]; 

    player = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil]; 

    if (timerCount == 10) 

    [self.player play]; 

    } 

    else { 
     [self.player stop]; 
    } 
} 
+0

'timerCount'持有的時間間隔,因爲...? – 2011-05-23 15:50:26

+0

當按下開始按鈕時它被設置爲0,並且每秒增加一次。 – dman 2011-05-23 15:57:03

回答

1

您正在尋找playAt:

例如基於你的 -

- (IBAction)valueChanged:(id)sender { 
    UISwitch *aSwitch = (UISwitch*)sender; 
    if (aSwitch.on) { 
     NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"horn" 
                    ofType:@"wav"]; 

     NSURL *fileURL = [NSURL fileURLWithPath:soundFilePath]; 

     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL 
                   error:nil]; 

     [audioPlayer playAtTime:(audioPlayer.deviceCurrentTime + 3)]; 
    } else { 
     [audioPlayer stop]; 
    } 
} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { 
    [self.theSwitch setOn:NO animated:YES]; 

    [player release]; 
} 
+0

我走了另一個方向,我使用UISwitch來禁用AVAudioPlayer,並在由NSTimer更新的方法中設置播放器並增加整數。然後我使用switch語句在所需的時間播放。 – dman 2011-05-27 04:46:11