2017-10-31 6 views
0

xcode 9とswift 4を使用しています。私のアプリでは、viewDidLoadで音楽を再生しています。私は別のビューに行くために、ビューコントローラを終了するとき、それは必要なように再生を続けます。いつの間にか、私はそのビューコントローラーに戻ってくると、曲は再び再生を開始します。この曲は最初に読み込まれた曲と重なっています。これをやめることをやめさせるためのアイデアはありますか?元のVCに戻ったときに曲が再生される

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() 

答えて

0

あなたviewDidLoadが再び呼び出されるので、それが再びそれを再生するよう要求され、再び再生を開始します。最も単純な修正点は、すでにこの呼び出しを行った場合に、静的なブール変数を保持して追跡することです。あなたのviewDidLoad

static var isMusicPlaying: Bool = false 

、あなたは遊びを呼び出すコードの前にコードを置くことができます。

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

理想的には、オーディオを再生するコードは、どこか別のマネージャーに別々に格納する必要があります。 –

+0

私はあなたが何を意味するのか見て、私は私のViewDidLoadにコードを入れましたが、最初と最後の行にエラーが表示されます。インスタンスメンバ 'ViewController'では、静的メンバ 'isMusicPlaying'は使用できません。私は私のviewDidLoadでも静的変数を入れてみましたが、私はこのエラーがあります。静的プロパティは型に対してのみ宣言できます。 – DaManSeth76

+0

@ DaManSeth76変数は 'viewDidLoad'関数の外で宣言されなければなりません。クラス名で呼び出す必要があります。たとえば、 'MyViewController.isPlaying' –

関連する問題