アプリ制作"ボタンを押した後にswitch文を通る前の状態に戻したい。"
swift初心者です。
xcode(言語:swift3)で、ボタンを押すと5種類の音声(「1.mp3」「2.mp3」「3.mp3」「4.mp3」「5.mp3」)がランダムに鳴るアプリを作ろうと考えております。
自分なりに調べて書いて見たのですがシミュレーションを開始すると、何度もボタンを押してもずっと同じ音声が流れ続け、一度アプリを終了しないと他の音声にはなりません。アプリを再起動させると、他の音声も再生されます。
毎回アプリを再起動せずに、ボタンを押すたびに、別の音声がランダムに流れるようにしたいのですが、どこをどのように直せばよいでしょうか。ボタンがタップされた後にswitch文を通る前の状態に戻すことができればいいような気がするんですが、調べてみてもわかりませんでした。
こちらに自分で書いたものを添付いたします。
よろしくお願いいたします。
import UIKit
import AVFoundation
class ViewController: UIViewController, AVAudioPlayerDelegate {
var audioPlayer:AVAudioPlayer!
@IBOutlet var button:UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// 再生する audio ファイルのパスを取得
let audioPath1 = Bundle.main.path(forResource: "1", ofType:"mp3")!
let audioUrl1 = URL(fileURLWithPath: audioPath1)
let audioPath2 = Bundle.main.path(forResource: "2", ofType:"mp3")!
let audioUrl2 = URL(fileURLWithPath: audioPath2)
let audioPath3 = Bundle.main.path(forResource: "3", ofType:"mp3")!
let audioUrl3 = URL(fileURLWithPath: audioPath3)
let audioPath4 = Bundle.main.path(forResource: "4", ofType:"mp3")!
let audioUrl4 = URL(fileURLWithPath: audioPath4)
let audioPath5 = Bundle.main.path(forResource: "5", ofType:"mp3")!
let audioUrl5 = URL(fileURLWithPath: audioPath5)
// audio を再生するプレイヤーを作成する
var audioError:NSError?
do {
let rand = arc4random() % 5
switch rand {
case 1:
audioPlayer = try AVAudioPlayer(contentsOf: audioUrl1)
case 2:
audioPlayer = try AVAudioPlayer(contentsOf: audioUrl2)
case 3:
audioPlayer = try AVAudioPlayer(contentsOf: audioUrl3)
case 4:
audioPlayer = try AVAudioPlayer(contentsOf: audioUrl4)
default:
audioPlayer = try AVAudioPlayer(contentsOf: audioUrl5)
}
} catch let error as NSError {
audioError = error
audioPlayer = nil
}
// エラーが起きたとき
if let error = audioError {
print("Error \(error.localizedDescription)")
}
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
}
// ボタンがタップされた時の処理
@IBAction func buttonTapped(_ sender : AnyObject) {
if ( audioPlayer.isPlaying ){
audioPlayer.stop()
button.setTitle("Stop", for: UIControlState())
}
else{
audioPlayer.play()
button.setTitle("Play", for: UIControlState())
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}