SecondViewControllerにUISliderを置いてそれによって音量を変更出来、FirstViewControllerにあるアラームの音量に反映させたいと考えています。その為にユーザが設定した音量(UISliderの値)をUserDafaultsを使ってFirstViewControllerに持って来たんですがエラー(Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0))に遭遇したため質問させて頂きます。
理想はUISliderで入力した数値をアラームの音量として使いたいです。(iPhoneの設定->サウンドと触覚->着信音と通知音のSliderが理想です。ライブラリは見つからなかった泣)
お手数ですがどうかよろしくお願いします。
FirstViewController
1import UIKit 2import AVFoundation 3 4class FirstViewController: UIViewController, AVAudioPlayerDelegate, UITableViewDelegate, UITableViewDataSource{ 5 6 let TODO = ["a", "b", "c", "d"] 7 //アラームのリストです 8 let volumeSlider = UISlider() as! SecondViewController 9 //Cast from 'UISlider' to unrelated type 'SecondViewController' always failsという警告が出ています。自分なりに書いてみましたがこれがダメなんでしょうか? 10 var volume: Float = 0 11 var counter = 0 12 var timer = Timer() 13 var startTime:Double = 0.0 14 var audioPlayer: AVAudioPlayer! 15 @IBOutlet weak var tableView: UITableView! 16 17 @IBAction func firstSwitch(_ sender: UISwitch) 18 { 19 if (sender).isOn 20 { 21 timer = Timer.scheduledTimer(withTimeInterval: 1 * 1, repeats: false, block: { timer in 22 23 self.audioPlayer.volume = self.volumeSlider.value(forKey: "DateStore") as! Float 24 //自分で書いてみました 25 26 self.audioPlayer.play() 27 28 self.audioPlayer.numberOfLoops = -1 29 print(self.audioPlayer.isPlaying) 30 }) 31 }else{ 32 timer.invalidate() 33 print("switch1stopped") 34 self.audioPlayer.stop() 35 } 36 }
SecondViewController
1import UIKit 2import AVFoundation 3 4class SecondViewController: UIViewController { 5 6 var audioPlayer: AVAudioPlayer! 7 8 let userDefaults = UserDefaults.standard 9 let str = Float() 10 @IBOutlet weak var volumeSlider: UISlider! 11 @IBOutlet weak var volumeLabel: UILabel! 12 @IBAction func volumeChange(_ sender: UISlider) 13 { 14 volumeLabel.text = String(Int(sender.value)) 15 volumeSlider.value = sender.value 16 audioPlayer.volume = volumeSlider.value 17 userDefaults.set(str, forKey: "DataStore") 18 audioPlayer.play() 19 } 20 21 override func prepare(for segue: UIStoryboardSegue, sender: Any?) 22 { 23 if segue.identifier == "endSetting" 24 { 25 let SecondViewController = segue.destination as! SecondViewController 26 SecondViewController.volume = volumeSlider.value 27 } 28 }//値渡しの方法が分からなかったのでsegueをviewcontrollerごと繋いでみました
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/12 01:24
2018/10/12 04:47
2018/10/12 04:50 編集
2018/10/12 05:33
2018/10/12 08:41
2018/10/12 08:45
2018/10/13 07:35
2018/10/15 14:57
2018/10/15 14:59