2017-10-31 5 views
0

Ich benutze xcode 9 und swift 4 für meine App. In meiner App habe ich Musik in der ViewDidLoad spielen. Wenn ich den View-Controller verlasse, um zu einer anderen Ansicht zu wechseln, spielt er weiter wie gewünscht. Wenn ich jedoch zu diesem View-Controller zurückkehre, beginnt das Lied erneut zu spielen. Dieser Song überlappt den Song, der zuerst geladen wurde. Habt ihr irgendwelche Ideen, wie man das verhindern kann?Musik spielt über das Lied, wenn ich zum ursprünglichen VC zurückkomme

do 
{ 
    let audioPath = Bundle.main.path(forResource: "APP4", ofType: "mp3") 
    try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL) 
} 
catch 
{ 
    //catch error 
} 

let session = AVAudioSession.sharedInstance() 

do 
{ 
    try session.setCategory(AVAudioSessionCategoryPlayback) 
} 
catch 
{ 
} 

player.numberOfLoops = -1 
player.play() 

Antwort

0

Es beginnt wieder zu spielen, weil Ihr viewDidLoad erneut aufgerufen wird, die es wieder spielen fragt. Eine einfachste Lösung wäre, eine statische Bool-Variable beizubehalten, um den Überblick zu behalten, wenn Sie diesen Aufruf bereits durchgeführt haben.

static var isMusicPlaying: Bool = false 

In Ihrem viewDidLoad, können Sie Code vor dem Code setzen, der das Spiel aufruft.

guard !isMusicPlaying else { 
    return 
} 
isMusicPlaying = true 
+0

Obwohl, idealerweise sollte Ihr Code, der Audio spielt, in einem Manager irgendwo getrennt untergebracht werden. –

+0

Ich sehe, was Sie meinen, ich habe den Code in meine ViewDidLoad, aber es kommt mit einem Fehler auf der ersten und letzten Zeile. Statischer Member 'isMusicPlaying' kann nicht für den Instanztyp 'ViewController' verwendet werden. Ich habe versucht, die statische Variable in meinem viewDidLoad auch zu setzen, aber ich habe diesen Fehler. Statische Eigenschaften können nur für einen Typ deklariert werden. – DaManSeth76

+0

@ DaManSeth76 die Variable muss außerhalb der Funktion 'viewDidLoad' deklariert werden. Und sollte mit dem Klassennamen aufgerufen werden. Zum Beispiel 'MyViewController.isPlaying' –

Verwandte Themen