Udemy - EggTimer App

박중권·2024년 5월 26일
0

Udemy

목록 보기
4/8
post-thumbnail

이번엔 삶은 계란 시간을 알려주는 타이머를 만드는 챕터였다.
그리고 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()
    }
}

완성된 모습:

끝!

profile
Hello World!

0개의 댓글