이번엔 삶은 계란 시간을 알려주는 타이머를 만드는 챕터였다.
그리고 AVFoundation과 AVAudioPlayer를 활용해 보았다!
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player: AVAudioPlayer!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var progressBar: UIProgressView!
//dictionary
let eggTimes = ["Soft": 3, "Medium": 4, "Hard": 7]
var timer = Timer()
var totalTime = 0
var secondsPassed = 0
@IBAction func hardnessSelected(_ sender: UIButton) {
//이 코드가 없다면, 하나의 버튼을 누른 후 실수로 다시 눌렀을 때,
//타이머가 초기화가 되어서 실행되는게 아니라, 동시에 카운트가 된다.
//그러므로, invalidate()를 꼭 해줘야 한다.
timer.invalidate()
let hardness = sender.currentTitle!
totalTime = eggTimes[hardness]!
//눌렸을 때, 다시 시작을 위한 코드
progressBar.progress = 0.0
secondsPassed = 0
titleLabel.text = hardness
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
}
@objc
func updateTimer() {
if secondsPassed < totalTime {
secondsPassed += 1
//나누기를 하기 전에, Float로 해야, 시간이 정확하게 계산이 된다.
progressBar.progress = Float(secondsPassed) / Float(totalTime)
}
else {
timer.invalidate()
titleLabel.text = "DONE!"
playSound(soundName: "alarm_sound") //사운드를 추가
}
}
//사운드 추가 함수
func playSound(soundName: String) {
let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
완성된 모습:
끝!