섹션8: Control Flow and Optionals, 에그 타이머 만들기 (복습)

인생노잼시기·2021년 2월 3일
0

📱Udemy iOS

목록 보기
3/20

Timer 활용하기
Progress View 사용하기

Egg Timer Project


눈이 아래에 있다고 생각하고 이미지의 순서를 바꿔야 한다

  • label 안의 텍스트가 화면 사이즈가 줄어듬에 따라 잘리는 경우 해결책
      1. Lines: 0
      1. AutoShrink: Minimum Font Size

IBAction에서 sender 타입

Any가 일반적이지만
UIButton의 속성을 활용하기 위해 UIButton을 선택하고
sender.currentTitle처럼 속성을 사용했다.
그리고 같은 IBAction을 공유하고 변화를 주고 있다.

switch, dictionary, Optionals

딕셔너리 타입은 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 View


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()
        }
    }
}

개발 영단어

  • objc: objective-C

영단어

  • preemptive: 선점하는
  • pull into a station: 역에 도착하다
  • rearing cats: 고양이를 기르다
  • remnant: 남은, remnant code(전에 만든 코드)
  • fallacies: 오류
profile
인생노잼

0개의 댓글