iOS

[ IOS ] μ•ŒλžŒ μ‹œκ³„ λ§Œλ“€κΈ° - 데이터 피컀 μ‚¬μš©ν•΄ λ‚ μ§œ μ„ νƒν•˜κΈ°

Forest Yun 2021. 7. 14. 16:53
728x90

κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

 

문제

데이터 피컀λ₯Ό μ΄μš©ν•˜μ—¬ μ‹œκ°„μ„ μ„ νƒν•˜κ³ , 선택 μ‹œκ°„ 1λΆ„ μ „λΆ€ν„° 화면이 λΉ¨κ°„μƒ‰λ˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€. μ„ νƒν•œ μ‹œκ°„μ΄ 되면 배경색을 μ›λž˜ μƒνƒœλ‘œ λ˜λŒλ¦°λ‹€.

 

 

κ΅¬ν˜„ μˆœμ„œ

1. λ ˆμ΄μ•„μ›ƒ μž‘μ„±

 2. μ•„μšΈλ › λ³€μˆ˜, μ•‘μ…˜ ν•¨μˆ˜ μΆ”κ°€

 3. 선택 λ‚ μ§œμ™€ μ‹œκ°„ 좜λ ₯

 4. ν˜„μž¬ μ‹œκ°„ 좜λ ₯

 5. ν˜„μž¬ μ‹œκ°„μ΄ 선택 μ‹œκ°„λ˜κΈ° 1λΆ„ μ „λΆ€ν„° λ°°κ²½ν™”λ©΄ 빨간색이 λ˜λ„λ‘ κ΅¬ν˜„

 

 

 


1. λ ˆμ΄μ•„μ›ƒ μž‘μ„±

Lableκ³Ό DatePicker λ₯Ό μ΄μš©ν•΄ λ ˆμ΄μ•„μ›ƒμ„ κ·Έλ¦°λ‹€.

 

 

 


2. μ•„μšΈλ › λ³€μˆ˜μ™€ μ•‘μ…˜ ν•¨μˆ˜ μΆ”κ°€

 

//ViewController

import UIKit

class ViewController: UIViewController {    
    @IBOutlet var lblCurrentTime: UILabel!
    @IBOutlet var lblSelectTime: UILabel!
    
    //λ·° 생성 μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜
    override func viewDidLoad() {
        super.viewDidLoad()        
    }
    
    //DatePicker 선택 μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜
    @IBAction func changeDatePicker(_ sender: UIDatePicker) {
    }
}

 

 

 


3. μ„ νƒν•œ λ‚ μ§œμ™€ μ‹œκ°„ 좜λ ₯ν•˜λ„λ‘ κ΅¬ν˜„

DatePicker μ„ νƒμ‹œ ν˜ΈμΆœλ˜λŠ” μ•‘μ…˜ν•¨μˆ˜ changeDatePicker에 μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

 

 //DatePicker 선택 μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜
    @IBAction func changeDatePicker(_ sender: UIDatePicker) {
        let datePickerView = sender //(1)인수 μ €μž₯
        let formatter = DateFormatter() //(2)DateFomatter 클래슀 μƒμˆ˜ μ„ μ–Έ
        formatter.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„" //(3)λ‚ μ§œ ν˜•μ‹ μ§€μ •
        
        lblSelectTime.text  = "선택 μ‹œκ°„: " + formatter.string(from: datePickerView.date)//(4)
    }
  1. μ „λ‹¬λœ 인수λ₯Ό λ³€μˆ˜μ— μ €μž₯ν•œλ‹€.
  2. λ‚ μ§œλ₯Ό 보여주기 μœ„ν•΄ ν˜•μ‹μ΄ ν•„μš”ν•œλ°, ν˜•μ‹ 지정을 μœ„ν•΄ DateFomatter 클래슀λ₯Ό μ‚¬μš©ν•œλ‹€.
  3. DateFomatter.dateFomat 을 μ΄μš©ν•΄ λ‚ μ§œ ν˜•μ‹ μ§€μ •
  4. μ•„μšΈ λ³€μˆ˜.text 에 인수.date 값을 λ¬Έμžμ—΄λ‘œ ν˜•λ³€ν™˜ν•˜μ—¬ κ°’ μ„€μ •

 

 

 


4. ν˜„μž¬ μ‹œκ°„ 좜λ ₯λ˜λ„λ‘ κ΅¬ν˜„

ν˜„μž¬ μ‹œκ°„μ΄ κ³ μ •λ˜μ–΄ μžˆμ§€ μ•Šκ³  맀초 κ°±μ‹ λ˜κ²Œ ν•˜κΈ° μœ„ν•΄μ„œλŠ” 타이머 κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€

Timer.scheduledTime(timeInterval: interval, target: self, 
					select: timeSelector, userInfo: nil, repeats: true)

Timer 클래슀의 scheduledTime λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ 타이머λ₯Ό μ„€μ •ν•œλ‹€.

타이머 섀정을 μœ„ν•΄ ν•„μš”ν•œ μ›μ†Œ
timeInterval 타이머 간격
target λ™μž‘λ  view
selector 타이머가 ꡬ동될 λ•Œ μ‹€ν–‰ν•  ν•¨μˆ˜
userInfo μ‚¬μš©μž 정보
reapts λ°˜λ³΅μ—¬λΆ€

λ”°λΌμ„œ Timer.scheduledTime()λ₯Ό μ‚¬μš©ν•˜κΈ° μ „ interval κ³Ό selectλ₯Ό λ§Œλ“€μ–΄μ•Όν•œλ‹€.

즉, 타이머 간격과 μ‹€ν–‰ν•  ν•¨μˆ˜κ°€ ν•„μš”ν•˜λ‹€.

 

 

ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜κΈ° μ „, λ¨Όμ € ν•„μš”ν•œ λ³€μˆ˜ λ˜λŠ” μƒμˆ˜λ₯Ό λ§Œλ“ λ‹€.

class MissionDatePickerViewController: UIViewController {
    let timeSelector:Selector = #selector(MissionDatePickerViewContriller.updateTime)
    let interval:Double = 1.0 // 1초 의미
    
    @IBOutlet var lblCurrentTime: UILabel!
    @IBOutlet var lblSelectTime: UILabel!
    
    .
    .
    .
}
  • κ³§ λ§Œλ“€ ν•¨μˆ˜λ₯Ό μ§€μ •ν•œ selectorλ₯Ό ν•˜λ‚˜ μƒμ„±ν•œλ‹€.
  • 타이머에 μ‚¬μš©λ  intervalλ₯Ό μƒμ„±ν•œλ‹€.

 

 

타이머 ꡬ동 μ‹œ 호좜될 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄λ³΄μž

    @objc func updateTime(){
        let currentDate:NSDate = NSDate() //ν˜„μž¬ μ‹œκ°„μ„ κ°€μ Έμ˜€λŠ” 클래슀
        let fomatter: DateFormatter = DateFormatter() // λ‚ μ§œ ν˜•μ‹μ„ μ§€μ •ν•΄ 쀄 클래슀
        fomatter.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„ s초" //λ‚ μ§œ ν˜•μ‹ μ§€μ •
        
        lblCurrentTime.text = "ν˜„μž¬ μ‹œκ°„: " + fomatter.string(from: currentDate as Date)
    }
    //#selector()의 인자둜 μ‚¬μš©λ  λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  λ•Œ Object-Cμ™€μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•˜μ—¬ ν•¨μˆ˜ μ•žμ— @objc ν‚€μ›Œλ“œ ν•„μˆ˜
  • μ‚¬μš© λͺ©μ  : 타이머가 ꡬ동될 λ•Œ μ‹€ν–‰
  • ν•„μš”ν•œ κΈ°λŠ₯ : ν˜„μž¬ μ‹œκ°„ κ°±μ‹ 
  • κ·Έλ ‡λ‹€λ©΄ 무엇을 κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ”κ°€? lblCurrentTime.text에 ν˜„μž¬ μ‹œκ°„μ„ μ €μž₯ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.
  • ν•„μš”ν•œ 것은? ν˜„μž¬ μ‹œκ°„μ„ 가져와쀄 클래슀, NSDate 클래슀 + μΆ”κ°€μ μœΌλ‘œ λ‚ μ§œ ν˜•μ‹μ„ μ§€μ •ν•  DateFomatter 클래슀  

+ #selector()의 μΈμžλ‘œ μ‚¬μš©λ  λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  λ•Œ Object-Cμ™€μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•˜μ—¬ ν•¨μˆ˜ μ•žμ— @objc ν‚€μ›Œλ“œ ν•„μˆ˜

 

 

 

 


5. ν˜„μž¬ μ‹œκ°„μ΄ 선택 μ‹œκ°„λ˜κΈ° 1λΆ„ μ „λΆ€ν„° λ°°κ²½ν™”λ©΄ 빨간색이 λ˜λ„λ‘ κ΅¬ν˜„

ν˜„μž¬ μ‹œκ°„ == 선택 μ‹œκ°„ -1  μΌλ•Œ λ°°κ²½ 화면을 λΉ¨κ°„μƒ‰μœΌλ‘œ λ³€κ²½ν•œλ‹€.

 

λ¨Όμ € ν˜„μž¬ μ‹œκ°„κ³Ό μ•ŒλžŒλ  μ‹œκ°„μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€.

class MissionDatePickerViewController: UIViewController {
    ...
    var currentTime: String = String() //ν˜„μž¬ μ‹œκ°„μ„ μ €μž₯ν•  λ³€μˆ˜
    var alarmTime: String = String()   //μ•ŒλžŒλ  μ‹œκ°„μ„ μ €μž₯ν•  λ³€μˆ˜
    
    @IBOutlet var lblCurrentTime: UILabel!
    @IBOutlet var lblSelectTime: UILabel!
    
    .
    .
    .
}

 

 

그리고 changeDatePicker와 updateTimeμ—μ„œ 각각 alarmTimeκ³Ό currenTime에 값을 μ €μž₯ν•œλ‹€.

updateTime λ©”μ†Œλ“œμ—μ„œλŠ” currentTime λ³€μˆ˜λ₯Ό μœ„ν•œ formatterλ₯Ό λ”°λ‘œ 생성해 μ„€μ •ν•΄μ€€λ‹€.

//DatePicker 선택 μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜
    @IBAction func changeDatePicker(_ sender: UIDatePicker) {
        let datePickerView = sender //인수 μ €μž₯
        let formatterDate = DateFormatter() //DateFomatter 클래슀 μƒμˆ˜ μ„ μ–Έ
        formatterDate.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„" //λ‚ μ§œ ν˜•μ‹ μ§€μ •
        
        lblSelectTime.text  = formatterDate.string(from: datePickerView.date)
        alarmTime = formatterDate.string(from: datePickerView.date - 60) //μ•ŒλžŒλ  μ‹œκ°„μ„ μ €μž₯ν•œλ‹€.
    }
    
    //타이머가 κ΅¬λ™λ λ•Œ μ‹€ν–‰ν•  ν•¨μˆ˜
    @objc func updateTime(){
        let currentDate:NSDate = NSDate() 
        let fomatterDate: DateFormatter = DateFormatter()
        let formatterTime = DateFormatter()
        fomatterDate.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„ s초" 
        formatterTime.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„"
        
        lblCurrentTime.text = fomatterDate.string(from: currentDate as Date)
        currentTime = formatterTime.string(from: currentDate as Date)
        
    }

 

 

 

ν˜„μž¬ μ‹œκ°„κ³Ό μ•ŒλžŒμ‹œκ°„μ„ 비ꡐ해 쀄 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•œλ‹€.

import UIKit

class MissionDatePickerViewController: UIViewController {
    
    .
    .
    .
    
    //ν˜„μž¬ μ‹œκ°„κ³Ό μ•ŒλžŒ μ‹œκ°„μ„ λΉ„κ΅ν•˜λŠ” ν•¨μˆ˜
    func compareTime(){
        var backgroundColor: UIColor
        
        if(currentTime == alarmTime){
            backgroundColor = UIColor.red
        }
        else{
            backgroundColor = UIColor.white
        }
        view.backgroundColor = backgroundColor
    }
}

 

 

 

compareTime ν•¨μˆ˜λŠ” λ§€ interval κ°±μ‹  λ•Œλ§ˆλ‹€ ν˜„μž¬ μ‹œκ°„κ³Ό μ•ŒλžŒ μ‹œκ°„μ„ 비ꡐ해야 ν•˜κΈ° λ•Œλ¬Έμ— 타이머가 ꡬ동될 λ•Œ μ‹€ν–‰ν•˜λŠ” updateTime ν•¨μˆ˜μ—μ„œ ν˜ΈμΆœλ˜λ„λ‘ ν•œλ‹€.

@objc func updateTime(){
        let currentDate:NSDate = NSDate() //ν˜„μž¬ μ‹œκ°„μ„ κ°€μ Έμ˜€λŠ” 클래슀
        let fomatterDate: DateFormatter = DateFormatter() // λ‚ μ§œ ν˜•μ‹μ„ μ§€μ •ν•΄ 쀄 클래슀
        let formatterTime = DateFormatter()
        fomatterDate.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„ s초" //λ‚ μ§œ ν˜•μ‹ μ§€μ •
        formatterTime.dateFormat = "yyyyλ…„ MMμ›” dd일 a hhμ‹œ mmλΆ„"
        
        lblCurrentTime.text = fomatterDate.string(from: currentDate as Date)
        currentTime = formatterTime.string(from: currentDate as Date)
        
        compareTime()
    }

 

 

 

 

 

 

 

 

κ³΅λΆ€ν•œ 자료

Do It! μŠ€μœ„ν”„νŠΈλ‘œ 아이폰 μ•± λ§Œλ“€κΈ° κ°œμ • 5판
728x90