라면 타이머 앱
내가 작성한 라면 타이머 코드는 다음과 같다
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
@IBOutlet weak var segment: UISegmentedControl!
var secondsLeft: Int = 180
var timer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
timerButton.layer.cornerRadius = 10
}
func resetTimer() {
timer?.invalidate()
timer = nil
timerButton.setTitle("타이머 시작하기", for: .normal)
}
func updateTimerLabel(){
var minutes = self.secondsLeft / 60
var seconds = self.secondsLeft % 60
if self.secondsLeft < 11 {
self.timerLabel.textColor = UIColor.red
} else {
self.timerLabel.textColor = UIColor.black
}
UIView.transition(with: self.timerLabel, duration: 0.3, options: .transitionFlipFromBottom) {
if self.secondsLeft > 0{
self.timerLabel.text = String(format: "%02d:%02d",minutes, seconds)
} else{
self.timerLabel.text = "시간 끝!"
}
} completion: { (animated) in
}
}
@IBAction func segmentValueChanged(_ sender: Any) {
if segment.selectedSegmentIndex == 0 {
self.secondsLeft = 180
self.updateTimerLabel()
resetTimer()
return
} else if segment.selectedSegmentIndex == 1{
self.secondsLeft = 240
self.updateTimerLabel()
resetTimer()
return
} else{
self.secondsLeft = 300
self.updateTimerLabel()
resetTimer()
return
}
}
@IBAction func timerButtonClicked(_ sender: Any) {
self.timerButton.setTitle("타이머 종료하기", for: .normal)
self.secondsLeft -= 1
self.updateTimerLabel()
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { t in
self.secondsLeft -= 1
self.updateTimerLabel()
if self.secondsLeft == 0{
self.resetTimer()
}
}
}
}
다른 사람이 작성한 코드는 다음과 같다.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
@IBOutlet weak var segment: UISegmentedControl!
var secondsLeft: Int = 180
var timer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
timerButton.layer.cornerRadius = 10
self.updateTimeLeft()
}
func resetTimer() {
timer?.invalidate()
timer = nil
timerButton.setTitle("타이머 시작하기", for: .normal)
}
func updateTimerLabel() {
var minutes = self.secondsLeft / 60
var seconds = self.secondsLeft % 60
if self.secondsLeft < 10 {
self.timerLabel.textColor = UIColor.red
} else {
self.timerLabel.textColor = UIColor.black
}
UIView.transition(with: self.timerLabel, duration: 0.3, options: .transitionFlipFromBottom) {
if self.secondsLeft > 0 {
self.timerLabel.text = String(format: "%02d:%02d", minutes, seconds)
} else {
self.timerLabel.text = "시간 끝!"
}
} completion: { (animated) in
}
}
func updateTimeLeft() {
self.secondsLeft = 180 + segment.selectedSegmentIndex * 60
self.updateTimerLabel()
}
@IBAction func segmentValueChanged(_ sender: Any) {
self.resetTimer()
self.updateTimeLeft()
}
@IBAction func timerButtonClicked(_ sender: Any) {
if timer != nil {
resetTimer()
return
}
self.timerButton.setTitle("타이머 종료하기", for: .normal)
self.updateTimeLeft()
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (t) in
self.secondsLeft -= 1
self.updateTimerLabel()
if self.secondsLeft == 0 {
self.resetTimer()
}
}
}
}
정리하자면, 나는 if문을 사용하여 segment.selectedSegmentIndex가 0,1,2인 경우에 따라서 표시되는 시간을 다르게 하였다.
하지만 다른 사람이 작성한 코드를 보면 3분을 기준으로 segment.selectedSegmentIndex의 값에다가 60을 곱하여 상황에 맞추어 변화시켜주는 updateTimeLeft()함수를 만들고 표시되는 시간을 초기화 해주는 resetTimer()함수와 함께 segmentValueChanged(_ sender: Any) 함수에 안에 포함시켜 segment의 값이 변할 때 마다 시간을 초기화해 주었다.
비교를 해보았을 때, 다른 사람이 작성한 코드가 더 깔끔하고, 따로 함수로 만들어주었기 때문에 사용가능성 측면에서도 괜찮은 것 같다.
따라서 앞으로 기능을 구현할 때 더 객체화하는 쪽으로 연습을 해야겠다.
Author And Source
이 문제에 관하여(라면 타이머 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oguuk/라면-타이머-앱저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)