モーダル遷移前の画面で再生した音楽を遷移後のボタンで止める動作に関して質問です。今現在遷移前で次のコードを書いています。
試してみたこと
①オーディオ名がaudioPlayerGameなので、遷移前のビューコントローラ(QuizViewController)にaudioStopファンクションをつくり中にaudioPlayerGame?.stop()を書き、遷移先の画面でQuizViewController.audioStop()と記述した。
②コード下部にあるように、遷移先に値を受け渡すようにオーディオを受け渡そうとした。
しかしオーディオは関数の中で指定されており、prepare(for segue...の中で受け渡すことができなかった。さらに受け渡したところで、前画面の音楽を操作することにはつながらないのでは?という疑問もあります。
swift
1import UIKit 2import AVFoundation 3 4class QuizViewController: UIViewController { 5 var audioPlayerGame:AVAudioPlayer! 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 self.qText.isEditable=false 9 if UserDefaults.standard.object(forKey:"count") != nil { 10 count=0 11 UserDefaults.standard.set(count,forKey:"count") 12 correct=0 13 UserDefaults.standard.set(correct,forKey:"correct") 14 15 if let url = Bundle.main.url(forResource: "game_maoudamashii_5_village02", withExtension: "mp3") { 16 do { 17 audioPlayerGame = try AVAudioPlayer(contentsOf: url) 18 audioPlayerGame?.play() 19 } catch { 20 // プレイヤー作成失敗 21 // その場合は、プレイヤーをnilとする audioPlayer = nil 22 } 23 } else { 24 // urlがnilなので再生できない fatalError("Url is nil.") 25 } 26 27 } 28 } 29override func didReceiveMemoryWarning() { 30 super.didReceiveMemoryWarning() 31 // Dispose of any resources that can be recreated. 32 } 33 34 35 36 37 @IBAction func returnTop(segue:UIStoryboardSegue){ 38 } 39//<試してみたこと②のときに書き加えた部分> 40 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 41 if (segue.identifier == "next") { 42 let subVC: CommentaryViewController = segue.destination as! CommentaryViewController 43 CommentaryViewController.audioPlayerGame2 = audioPlayerGame 44 45 } } 46//<試してみたこと② ここまで> 47 48 func nextPage(){ 49 self.performSegue(withIdentifier: "next", sender: nil) 50 } 51 52 func audioStop(){ 53 audioPlayerGame?.stop() 54 } 55 56 } 57
できるだけ理解していただけるように書いたつもりですが、わかりにくい箇所等あれば、ご指摘いただければと思います。
どうかよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー