当离开初始视图控制器时停止播放音乐(使用AVAudioPlayer)

问题描述:

- (void)viewDidLoad { 
     [super viewDidLoad]; 

    NSURL *url = [NSURL fileURLWithPath: [NSString stringWithFormat:@"%@/Intro2.mp3", [[NSBundle mainBundle] resourcePath]]]; 

    NSError *error; 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    audioPlayer.numberOfLoops = -1; 

    if (audioPlayer == nil) 
     NSLog([error description]); 
    else 
     [audioPlayer play]; 
} 

当应用程序加载初始视图控制器并且循环良好时,我的背景音乐播放。当我离开初始视图控制器时,音乐会继续播放整个应用程序,当我离开初始视图控制器时,我希望音乐停止播放。当离开初始视图控制器时停止播放音乐(使用AVAudioPlayer)

而且,也许是无关的,但我有一个问题,在此行的代码(黄色!):

NSLog([error description]); 

如果音乐继续播放,这意味着视图控制器仍然保留。例如,它是导航视图控制器的根视图控制器。

要停止音乐时,不再显示视图控制器,你应该使用的方法viewWillDisappear:如果你想再次显示视图控制器的音乐恢复

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [audioPlayer stop]; // Or pause 
} 

,使用方法viewWillAppear

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [audioPlayer play]; 
} 

要删除的警告,更改行:

NSLog([error description]); 

到:

NSLog(@"%@", [error description]); 
+0

谢谢你的工作完美。 – Austinj 2012-03-25 16:19:45

也许我误解,但你可以简单地使用下面的UIView生命周期事件的一个叫stop您的AVAudioPlayer实例。

- (void)viewWillDisappear:(BOOL)animated 
{ 
[super viewWillDisappear:animated]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
[super viewDidDisappear:animated]; 
}