2011-07-24 125 views
0

我目前在我的應用程序中播放背景音樂。 在:檢查音樂是否正在播放

-(void)viewDidLoad 

我開始了音樂,使用:

[self LoadMusic]; 

這基本上啓動然後音樂緩衝區,如果設置指出「聲音是在」音樂開始。

我遇到的問題是當我移動視圖時,音樂繼續播放(因爲它應該),但是當你回到音樂最初開始的視圖控制器時,它會再次激活。

所以你最終會得到相同的音樂循環。

我已經嘗試了一些東西,比如:

if(MusicPlay.playing){ 
// do nothing 
}else{ 
// start music 
    [self LoadMusic]; 
} 

這是loadMusic

- (void) LoadMusic{ 
    //Notification for stoping 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopMusic) name:@"StopMusic" object:nil]; 
    //Notification for playing 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playMusic) name:@"PlayMusic" object:nil]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *SoundSwitch = [defaults stringForKey:@"Sound_EnabledS"]; 


    // grab the path to the caf file 
    NSString *soundFilePath = 
    [[NSBundle mainBundle] pathForResource: @"Menu_Loop" 
            ofType: @"mp3"]; 
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; 
    // create a new AVAudioPlayer initialized with the URL to the file 
    AVAudioPlayer *newPlayer = 
    [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL 
              error: nil]; 
    // set our ivar equal to the new player 
    self.MusicPlay = newPlayer; 
    // preloads buffers, gets ready to play 
    [MusicPlay prepareToPlay]; 
    MusicPlay.numberOfLoops = -1; // Loop indefinately 
    if ([SoundSwitch isEqualToString:@"1"]){ 
     [self.MusicPlay play]; // Plays the sound 
    }else{ 
     [self.MusicPlay stop]; // Stops the sound 
    } 
} 

的代碼,但因爲它沒有看到MusicPlay.playing是唯一真正的一次,這是行不通該視圖已'重新啓動'

如果有人有一個很好的方法來解決這個問題。 請讓我知道。

謝謝。

+0

你能PLZ粘貼LoadMusic方法的代碼 –

+0

見上面檢查。謝謝。 –

回答

0

你的代碼也應該工作,但與下面的代碼

if([self.MusicPlay isPlaying]){ // playing is property and isPlaying is getter method 
// do nothing 
}else{ 
// start music 
    [self LoadMusic]; 
} 
2

我猜在這裏發生的是,當主菜單的視圖被卸載時,你沒有處理self.MusicPlay。如果在切換視圖時需要繼續播放背景音樂,則應該由應用程序控制器(或等同物)來處理,而不是通過一個特定的視圖來處理。