Timer 활용하기
Progress View 사용하기
눈이 아래에 있다고 생각하고 이미지의 순서를 바꿔야 한다
Any가 일반적이지만
UIButton의 속성을 활용하기 위해 UIButton을 선택하고
sender.currentTitle처럼 속성을 사용했다.
그리고 같은 IBAction을 공유하고 변화를 주고 있다.
딕셔너리 타입은 nil이 될 수 있다고 컴파일러에서 생각하기 때문에, 아니라고 !로 unwrap해줘야 한다
hardness에 key에 없는 값이 나올 수 있다고 컴파일러에서 생각하기 때문에 !로 아니라고 unwrap해줘야 한다
import UIKit
class ViewController: UIViewController {
let eggTimes = ["Soft": 5, "Medium": 7, "Hard": 12]
@IBAction func hardnessSelected(_ sender: UIButton) {
let hardness = sender.currentTitle!
switch hardness {
case "Soft":
print(eggTimes[hardness]!)
case "Medium":
print(eggTimes[hardness]!)
default:
print(eggTimes[hardness]!)
}
}
}
Progress Tint
Track Tint
var timer = Timer() //새로운 인스턴스 생성
var player: AVAudioPlayer! //데이터 타입 선언
invalidate()
Stops the timer from ever firing again and requests its removal from its run loop.
import UIKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var statusLabel: UILabel!
@IBOutlet weak var progressbar: UIProgressView!
var totalTime = 0
var secondPassed = 0
let eggTimes = ["Soft": 5, "Medium": 7, "Hard": 12]
var timer = Timer() //타이머 인스턴스 생성
var player: AVAudioPlayer!
@IBAction func hardnessSelected(_ sender: UIButton) {
timer.invalidate() //기존 타이머를 종료하고 새로운 타이머 실행
let hardness = sender.currentTitle!
totalTime = eggTimes[hardness]!
progressbar.progress = 0.0
secondPassed = 0
statusLabel.text = hardness
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateCounter), userInfo: nil, repeats: true) //새로운 타이머 할당
}
@objc func updateCounter() {
//example functionality
if secondPassed < totalTime {
secondPassed += 1
progressbar.progress = Float(secondPassed)/Float(totalTime)
} else {
timer.invalidate() //타이머 종료
statusLabel.text = "Done!"
let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
}