2016-05-19 6 views
0

Ich habe zwei View-Controller in einem Navigationscontroller, wir können vom ersten View-Controller zum zweiten View-Controller navigieren.Wie wird die Wiedergabe von Audio fortgesetzt, nachdem der View-Controller auf iOS beendet wurde?

Die Hörspiel-Code ist in der zweiten viewDidLoad Ansicht Controller-Methode wie folgt aus:

let url = NSBundle.mainBundle().URLForResource("audioName", withExtension: "mp3") 
     //player = AVAudioPlayer(contentsOfURL: url!) 
     do { 
      player = try AVAudioPlayer(contentsOfURL: url!) 
      //player.play() 
      dispatch_async(dispatch_get_main_queue(), { 
       self.player.play() 
      }) 
     } catch { 
      print("play error") 
     } 

Meine Frage ist, wenn die zweite View-Controller geladen wird, wird die Audio-Wiedergabe, aber wenn ich die zweite Ansicht entlassen Controller und gehen Sie zurück zum ersten View-Controller, der Ton hört auf zu spielen.

Ich habe versucht, sowohl die play() -Methode direkt und die dispatch_async (dispatch_get_main_queue()) -Methode, aber das Audio kann nicht weiter abgespielt werden, wenn der zweite View-Controller entlassen wird.

Und auch, das Audio kann automatisch im Hintergrund auf Xcode Simulator spielen, frage ich mich, ob es eine Möglichkeit gibt, dies anzupassen.

+0

machen Sie eine gemeinsame Ansicht fügen Sie Ihren Code in diesem, überprüfen Sie diese https://github.com/willingheart/AZSoundManager –

Antwort

0

Der 'player-AVAudioPlayer' wird in viewcontroller 2 deklariert. Wenn viewcontroller 2 aufgerufen wird, wird er zusammen mit dem viewcontroller freigegeben.

Erstellen Sie Ihr 'player-AVAudioPlayer'-Objekt als Singleton-Objekt und speichern Sie es in Ihren AppDelegate/Session-Daten. Wo immer Sie Ihr Audio abspielen möchten, greifen Sie einfach von dort auf dieses Objekt zu und spielen es ab. Auf diese Weise wird es weiter abgespielt, selbst nachdem der Ansichtscontroller 2 aufgeklappt ist.

Verwandte Themen