2017-06-30 3 views
0

ビューロード時にAVAudioPlayerというインスタンスが実行されています。別のViewControllerから私はUISwitchを持って音楽を止めます。スイッチからBoolを受け取って、consoleの正しい機能を呼び出していますが、再生を停止することができません。私は停止、一時停止、ボリュームを変更しようとしましたが、無駄にしました。アプリがシャットダウン(ホームタップとスワイプアップ)し、スイッチの状態がオフの場合、音楽は再生されません。スイッチをオンにすると、音楽は再生されますが、停止しません。バックグラウンドミュージックを停止できません(Swift 3、Xcode 8)

コード:

let optionDefaults = UserDefaults.standard 

@IBOutlet weak var musicOnOff: UISwitch! 

var musicOn : Bool = true 

@IBAction func switchToGame(sender: UIButton) { 


    if musicOnOff.isOn{ 

     musicOn = true 
     optionDefaults.set(musicOn, forKey: "musicOn") 

    } 

    if musicOnOff.isOn == false{ 

     musicOn = false 
     optionDefaults.set(musicOn, forKey: "musicOn") 

    }} 

override func viewDidLoad() { 
    super.viewDidLoad() 

if optionDefaults.value(forKey: "musicOn") != nil { 

    let musicOn: Bool = optionDefaults.value(forKey: "musicOn") as! Bool 
    if musicOn == false { 

     musicOnOff.isOn = false 

    } 

    else{ 

     musicOnOff.isOn = true 

    } 
}} 
+0

スイッチトグルのコードを含めることはできますか? viewcontrollerは一度ロードされたときにスイッチの状態をチェックするだけなので、音楽を一時停止することはできません。 –

+0

@DaneJordan、スイッチトグルコード –

答えて

0

あなたが音楽を再生しているだけのビューのロードcompletes.If ********スイッチの

var player:AVAudioPlayer = AVAudioPlayer() 

let optionDefaults = UserDefaults.standard 

override func viewDidLoad() { 

    super.viewDidLoad() 

    do{ 

     let audioPath = Bundle.main.path(forResource: "backgroundmusic", ofType: "wav") 
     try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL) 
     player.volume = 0.2 

     if optionDefaults.value(forKey: "musicOn") != nil { 

      let musicOn: Bool = optionDefaults.value(forKey: "musicOn") as! Bool 
      if musicOn == false { 

       print("********** Music is off **********") 
       player.stop() 

      } 

      else { 

       print("********** Music is On **********") 
       player.play() 

      } 
     } 
    } catch { 
     print("AVPlayer did not initialize") 
    } 

    player.numberOfLoops = -1 
} 

*******コードあなたは***停止し、スイッチのトグルは、単なるスイッチ用のトグルスイッチの動作に

var player:AVAudioPlayer = AVAudioPlayer() 

let optionDefaults = UserDefaults.standard 

override func viewDidLoad() { 

super.viewDidLoad() 
    playOrStopMusic() 
    } 

func playOrStopMusic(){ 
do{ 

     let audioPath = Bundle.main.path(forResource: "backgroundmusic", ofType: "wav") 
     try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL) 
     player.volume = 0.2 

     if optionDefaults.value(forKey: "musicOn") != nil { 

      let musicOn: Bool = optionDefaults.value(forKey: "musicOn") as! Bool 
      if musicOn == false { 

       print("********** Music is off **********") 
       player.stop() 

      } 

      else { 

       print("********** Music is On **********") 
       player.play() 

      } 
     } 
    } catch { 
     print("AVPlayer did not initialize") 
    } 

    player.numberOfLoops = -1 
} 

*******コードをpalyOrStopMusicメソッドを呼び出したときに再生したいです*****

let optionDefaults = UserDefaults.standard 

@IBOutlet weak var musicOnOff: UISwitch! 

var musicOn : Bool = true 

@IBAction func switchToGame(sender: UIButton) { 


    if musicOnOff.isOn{ 
     musicOn = true 
     optionDefaults.set(musicOn, forKey: "musicOn") 
    }else{ 
     musicOn = false 
     optionDefaults.set(musicOn, forKey: "musicOn") 
    } 

    playOrStopMusic() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    playOrStopMusic() 
} 
+0

を追加しました。それはうまくいかず、オプションのViewControllerに行くと、再び音楽を開始してオーバーレイされます –

関連する問題