2012-03-28 10 views
1

Mögliche Duplizieren:
iOS SDK : playing music on the background and switching viewsiOS Hintergrundmusik Probleme

Hallo Jungs zur Zeit im, diesen Code mit Hintergrundmusik in meiner app zu spielen, wenn seine .Aber gestartet, wenn ich meine Ansichten wechseln zu SecondView und zurück zu meiner Firstview Die Musik beginnt neu und überlappt die gerade gespielte Musik und es überlappt sich immer wieder, wenn ich zu meiner Firstview zurückkehre. Wie kann ich die Musik neu starten, wenn ich von SecondView zu meiner Firstview zurückwechsle .

FirstViewController.m

- (void)viewDidLoad { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
+0

Was ist "TheAudio"? –

Antwort

0

Du Neuzuweisung und die AVAudioPlayer jedes Mal, wenn Sie die Ansicht angezeigt werden neu erstellt. Sie sollten dies möglichst vermeiden. Als Lösung für Ihr Problem, abhängig von Ihrem Code, rufen Sie [theAudio stop] in viewDidDisappear oder viewDidUnload Ereignisse. Dies stoppt Ihren Audioplayer, wenn seine Ansicht in den Hintergrund gelangt.

+0

Ja, Sie können [theAudio stop] in viewDidDisappear oder viewWillDisappear aufrufen. Aber nicht in viewDidUnload, wie es nur aufgerufen wird, wenn irgendeine Speicherwarnung ausgelöst wird, sonst ... –

+0

Nun, ich brauche die Hintergrundmusik, um über alle Ansichten zu spielen und brauche die Musik neu zu starten, wenn ich meine Home-Taste zurück zu meiner ersten Ansicht drücke. Ich habe versucht, das [theAudio Stop] unter ViewDidDisappear, aber es stoppt die Musik beim Umschalten über die Ansichten und ich brauche diese Option nicht. –

1

Zwei Optionen,

1 Halten Sie den Player an, während die erste Anzeige ausgeblendet wird.

[theAudio stop] in `viewWillDisappear` 

2- Wenn Sie nicht wieder spielen wollen, kommen Sie zurück. deklarieren Sie theAudio in AppDelegate-Klasse. und vor dem Zuordnen prüfen, ob es zugeordnet ist oder nicht.

if(!appDelegate.theAudio) 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    appDelegate.theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
} 
else 
{ 

[theAudiostop]; 
    [theAudio play]; 
} 
+0

Nun, ich brauche die Hintergrundmusik, um über alle Ansichten zu spielen und brauche die Musik neu zu starten, wenn ich meine Home-Taste zurück zu meinem Firstview.Currently habe ich [theAudio prepareToPlay]; to - (void) viewWillDisappear: (BOOL) animierte {..und wenn ich den Home-Button zurück zu meinem FirstView drücke, läuft die Musik weiter, es funktioniert gut, aber ich möchte, dass die Hintergrundmusik neu startet, wenn ich meine Home-Taste zurück zu meiner FirstView drücke. –

3

Sie können NSUserDefaults verwenden, um die Musik zu spielen Status zu speichern, so dass, wenn die Ansicht geladen wird, wird die Musik nur gespielt werden, wenn es nicht schon hat.

if ([[NSUserDefaults standardUserDefaults] stringForKey:@"music"] == nil) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
    [[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"]; } 

Sie müssen diese Taste beim Beenden der App auf Null zurücksetzen. Andernfalls, wenn der Player die App beendet und beim nächsten Neustart der App die Zeichenfolge @ "music" nicht gleich Null ist.

Zum projectAppDelegate.m Datei:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
     [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"music"]; } 

Wenn die Musik im ganzen App gespielt wird, setzen Sie dann die Wiedergabe von Musik-Codes, wie unten gezeigt, sicher zu sein. Vergessen Sie nicht, den AVAudioPlayer * theAudio in der Datei projectAppDelegate.h zu deklarieren.

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
    [[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"]; } 

Ich könnte hier ein paar Bits verpasst haben. Führen Sie ein paar Tests aus, um es so zu machen, wie Sie es gerne hätten. Ich habe gerade meine App ausprobiert und es hat für mich funktioniert.