2016-04-05 11 views
1

私のアプリを起動すると、バックグラウンドミュージックが再生を開始します。しかし、私はスタートを押して別のビューコントローラーでゲームをプレイし、メニュー(最初のビューコントローラー)に戻ると、同じ曲がまだ再生されている間(結果=同時に2回聞く)、曲は再び始まります。とてもうるさい。これは私のviewDidLoad関数(おそらく私の問題がある)です。誰かが、最初にビューが読み込まれるときだけ、音楽を演奏する(説明するかコードを与えることによって)手伝ってもらえますか? VCが再びviewDidLoad()メソッドを実行しますので、私のバックグラウンドミュージックが2回(同時に)再生されます

override func viewDidLoad() { 
    super.viewDidLoad() 

    // get path of audio file 
    let myFilePathString = NSBundle.mainBundle().pathForResource("Background Music Loop (Free to Use)", ofType: "mp3") 
    if let myFilePathString = myFilePathString { 

     let myFilePathURL = NSURL(fileURLWithPath: myFilePathString) 
     do { try myAudioPlayer = AVAudioPlayer(contentsOfURL: myFilePathURL) 
      myAudioPlayer.play() 
      myAudioPlayer.numberOfLoops = -1 
     }catch{ 
      print("error") 
     } 
    } 
} 
+0

「メニューに戻る」と言えば、実際に元のメニューに戻るか、新しいメニューを作成してそのメニューに移動していますか? – dan

+0

元のメニュー(ロードされたときに音楽を開始するビューコントローラー)に戻ります –

答えて

0

myAudioPlayer.playは単に、再び呼び出されます。

私の考え: - 再生するオーディオプレーヤー上の条件を作る

は、変数

var x = false 

次のステップを宣言します。

if x == false { // your code here } 

他のVCからのセグエをトリガprepareForSegueメソッドを使用してみてください。

ので第二のViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if segue.identifier == "yourIdentifier" { 
     let destinationController = segue.destinationViewController as! // Controller Name here 
     destinationController.x = true 
    } 
} 

これがtrueにXを設定し、音楽が再び実行されません。

+0

ありがとうございます!しかしちょっと質問があるので、私はまだnoobです(ちょうどプログラミングで始まった)あなたの最後のコメントは//コントローラ名です。どのコントローラの名前が最初か2番目ですか?そして、セグの識別子のために、私はそれに名前を付ける必要がある、または名前が既にあるべきである可能性があります –

+0

おっとそれはあなたも大変感謝してくれました!あなたは私の将来の質問にも答えますか? –

+0

喜んで聞いてください:)あなたはまだビューコントローラの名前で助けが必要な場合:あなたは2番目から最初にセグをしています。宛先が最初のVCです。ストーリーボードのセグをクリックすると、右の列にセグの識別子を編集できます。そこに名前を付けて、同じ名前を "yourIdentifier"に入れてください。それが役に立てば幸い! – JVS

0

すべては、必要な機能に依存します。

あなただけのメニューのビューコントローラが画面に表示されているときに再生するBGMをしたい場合は、ビューコントローラ上のファイル名とプレーヤ変数のプロパティを作成し、その後、viewWillAppearで

Player.play 

そしてときに行うことができますユーザーは、viewDidDissappear関数で再生中のページを停止してナビゲートします。

音楽を常にバックグラウンドで再生したい場合は、独自のクラスを作成してアプリケーションデリゲートにsharedInstanceを渡して、アプリケーション全体でプレーヤーの1つのインスタンスを管理する価値があります。

関連する問題