2012-03-25 2 views
0
- (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]; 
} 

Meine Hintergrundmusik spielt, wenn die App den anfänglichen View-Controller laden, und Schlaufen in Ordnung. Wenn ich den ersten View-Controller belasse, wird die Musik weiterhin in der ganzen App abgespielt. Ich möchte, dass die Musik stoppt, wenn ich den ersten View-Controller verliere.Stop-Musik zu spielen, als Initial-View-Controller zu verlassen (mit AVAudioPlayer)

Außerdem ist es vielleicht nicht verwandtes, aber ich habe ein Problem (gelb!) Auf dieser Codezeile:

NSLog([error description]); 

Antwort

1

Wenn die Musik spielt weiter, das heißt, dass der View-Controller ist nach wie vor beibehalten. Es ist zum Beispiel der Root-View-Controller Ihres Navigations-View-Controllers.

Um die Musik zu stoppen, wenn die View-Controller nicht mehr angezeigt wird, sollten Sie die Methode verwenden viewWillDisappear:

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

Wenn Sie die Musik wieder aufnehmen, wenn die View-Controller wieder angezeigt möchten, viewWillAppear die Methode verwenden :

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

die Warnung, ändern Sie die Zeile entfernen:

NSLog([error description]); 

in:

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

Danke funktioniert perfekt. – Austinj

0

Vielleicht bin ich Missverständnis, aber Sie einfach eine der UIView Lifecycle-Ereignissen unter stop rufen auf Ihrer Instanz von AVAudioPlayer nutzen könnten.

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

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