2013-04-24 146 views
0

我有幾個視圖,其中一個是「選項」視圖,在這個視圖中會出現一個按鈕,允許用戶點擊一個按鈕來「停止」背景音樂,或者點擊它來打開它回來。林相當肯定,我有如何做到這一點的一般想法,問題是,我的代碼沒有工作,我不知道爲什麼。讓我的背景音樂播放器停止? Objective C

這是從執行文件中的代碼爲「選項」類:

- (IBAction)musicIO:(id)sender { 
    MenuViewController *myMusicPlayer = [[MenuViewController alloc] init]; 

    [myMusicPlayer backgroundMusicStart]; 

    } 

它調用我的菜單代碼的方法(不同類)

這是我的菜單代碼:

-(IBAction) backgroundMusicStart{ 

if(i != 1){ 
NSURL * URL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/backgroundMusic.wav", [[NSBundle mainBundle] resourcePath]]]; 
NSError *error; 
backgroundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:URL error:&error]; 
backgroundPlayer.numberOfLoops = -1; 

    [backgroundPlayer play]; 
    i = 1; 
    NSLog(@"In start music"); 
} 
else if (i == 1) { 
[backgroundPlayer stop]; 
    i = 0; 
    NSLog(@"In stop music"); 
    } 

} 

「i」是全局聲明的變量。

它的代碼問題: 它運行,NSLog輸出,它得到兩個if語句罰款,問題是當它在[backgroundPlayer停止]括號,它不停止音樂,我無法弄清楚爲什麼。

+0

根據你的使用情況是什麼,你可能想使用暫停,而不是止損,確定要使用哪一個取決於您是否希望[播放恢復或重新啓動](http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html)。 – hd1 2013-04-24 03:29:44

+0

我想讓它停下來。 – 2013-04-24 03:31:52

+0

將nslog更改爲NSLog(@「停止音樂%@」,backgroundPlayer);並查看後臺播放器是否爲 – 2013-04-24 03:34:04

回答

3

您每次調用backgroundPlayer時都會初始化backgroundPlayer,並且僅在其中一種情況下。你應該做的是讓backgroundPlayer實例變量和行爲在它的共享實例...示例如下:

// static AVPlayer *backgroundPlayer; 
- (IBAction) backgroundMusicStart { 
if (backgroundPlayer == nil) { 
    backgroundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:URL error:&error]; 
    backgroundPlayer.numberOfLoops = -1; 
} 

if (i == 1) { [backgroundPlayer stop]; } 
else if (i == 0) { backgroundPlayer play]; } 
} 
+0

所以我試了一下,它什麼都沒做。仍然是同樣的結果。當我點擊按鈕音樂繼續播放:/ – 2013-04-24 04:01:55

+0

所以這不是正確的答案,任何人有不同的解決方案? – 2013-04-25 18:34:17