#8日目のアプリ
プログレスバーを使ったタイマーアプリ。
ボタンを3つおいて、各ボタンを押すと、ボタン名が表示される。
押すボタンによって、トータル時間が変わって、
経過時間を下のプログレスバーで表示。
プログレスバーが最後になると、音が出る。
という仕様にしました。
##以下の流れで作りました。
- オブジェクトを配置して、Viewcontrolerに紐付け
- プログレスバーを追加
- import AVFoundation
- 再生するプレイヤーを作って、取り込んだ音を再生
##できたこと
- プログレスバーの設置
- 音の再生(復習)
##書いたコードを共有します!
import UIKit
import AVFoundation //音声ファイルを使うときimportする
class ViewController: UIViewController {
@IBOutlet weak var displayText: UILabel!
let eggTime = [
"Soft": 5,
"Medium": 7,
"Hard": 12
]
var myTimer = Timer()
var totalTime = 0
var secondsPassed = 0
var player : AVAudioPlayer! // 音声ファイルを再生するデッキ player を作る
@IBOutlet weak var progressBar: UIProgressView!
@IBAction func hardnessSelected(_ sender: UIButton) {
let selected = sender.currentTitle!
// switch selected {
// case "Soft":
// print(eggTime["Soft"]!)
// case "Medium":
// print(eggTime["Medium"]!)
// case "Hard":
// print(eggTime["Hard"]!)
//
// default:
// print("none")
// }
myTimer.invalidate()
secondsPassed = 0
totalTime = eggTime[selected]!
displayText.text = "\(sender.currentTitle!)"
progressBar.progress = 0.0
myTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(action), userInfo: nil, repeats: true)
}
@objc func action() {
if secondsPassed < totalTime {
secondsPassed += 1
progressBar.progress = Float(secondsPassed) / Float(totalTime)
print(Float(secondsPassed) / Float(totalTime))
print(secondsPassed)
} else {
// progressBar.progress = 1.0
myTimer.invalidate()
displayText.text = "done!"
//再生デッキに入れるCDを作る
let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
//再生デッキに入れる
player = try! AVAudioPlayer(contentsOf: url!)
//デッキの再生ボタンを押す
player.play()
}
}
}
##感想
よし、できた。きっとw