[ App ] Date Picker 알람시계 앱 만들기

Woong·2022년 4월 30일
0

DatePicker를 활용해서 선택한 시간에 화면이 반짝거리는 알람을 만들어보자!


1. 화면구성

먼저, DatePicker 1개와 Label 2개를 구성해준다.

*우리가 만들고자하는 DatePicker는 아래로 드르륵~(?) 넘기는 타입이므로 Wheel으로 설정해준다.

2. 전역변수 & 액션 설정하기

상단라벨 : lblCurrentTime --- (현재시간이 표기될 부분)
하단라벨 : lblPickerTiem --- (설정한시간이 표기될 부분)

액션 : changeDatePicker --- (데이트피커 시간설정 액션)

3. 상단라벨 : 1초간격으로 움직이는 시계가 작동되도록 만들어주기

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // 1초마다 updateTime 함수를 실행시키는 타이머
        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
    }
    @objc func updateTime(){
        
        let date = NSDate()                 // date에게 NSDate() 라는 클래스를 선언한다! -> 현재시간을 가져옴.
        let formatter = DateFormatter()     // formatter에게 DateFormatter()이라는 클래스를 선언한다!
        formatter.dateFormat = "yyyy-MM-dd EEE hh:mm:ss"  // DateFormatter에 저장된 프로퍼티인 .dateFormat으로 "연도-월-일 x요일 시간:분:초" 포맷을 정해줌.
        
        lblCurrentTime.text = "현재시간 : \(formatter.string(from: date as Date))"  // lblCurrentTime에 텍스트 표기
        // *부연설명 : .string 메서드를 활용해서 formatter의 타입을 String으로 변환시킨다.
    }

🖕 이거 만들면서 들었던 생각

1. #Selector가 뭐야? 그리고 @objc func 는 뭔데 대체?

/*간단답변 : 
 #Selector란?
- 1. Object-C 에서 셀렉터는 Object-C 메소드의 “이름”을 참조하는 타입
- 2. 스위프트에서는 Object-C에서 셀렉터를 [셀렉터 구조체]로 나타냄.
- 3. 셀렉터는 함수를 선택하는 역할을하는 "구조체"임

 @objc func란?
- 1. object-c에서 작동하는 #Selector를 스위프트에서 사용하기위해선 @objc라는 특성을 꼭!! 같이 써줘야함.

*/

2. NSDate() / DateFormatter() 는 뭔데 또 대체 뭐 어디서 나온건데??

/*
- 간단답변 : NSDate() 는 날짜객체를 생성함!
- 1. let now = NSDate() ->  print(now)  // 2022-04-30 20:07:05 +0000 값 출력됨.
- 2. DateFormatter()는 "연도", "시간" 만 알고싶다. 하는 경우면 DateFormatter로 포맷을 만들어 줄 수 있음! 
*/

3. formatter.string(from: date as Date) 에서 .string은 뭔데 대체? 와씨

/*
*간단답변 : 모르겠음 멘토님에게 슬랙으로 물어봤고 답변을 기다리는 중....~!

*/

(+추가) 카톡방에 물어봤더니 이렇게 답변이 왔다!

4. datePicker 날짜 맞췄을 때, 하단라벨에 날짜 기록시키기

    @IBAction func changeDatePicker(_ sender: UIDatePicker) {
        
        let datePickerView = sender 	// datePickerView 선택한 값 저장!
        let formatter = DateFormatter()	// 날짜를 표시할 형식으로 정해보자!
        formatter.dateFormat = "yyyy-MM-dd EEE hh:mm" // 요렇게!
        
        // lblPickerTime 에 날짜 표기시키기!
        lblPickerTime.text = "설정시간 : \(formatter.string(from: datePickerView.date))"
    }

5. (거의다됨) 알람 설정 기능 추가하기!

현재시간 == 설정시간 일 때, 알람이 깜빡깜빡거리게 만들어준다!

    @objc func updateTime(){		[현재시간부!!!!!!!!!!!!!!!!!]
/*   
        let date = NSDate()                 // date에게 NSDate() 라는 클래스를 선언한다! -> 현재시간을 가져옴.
        let formatter = DateFormatter()     // formatter에게 DateFormatter()이라는 클래스를 선언한다!
        formatter.dateFormat = "yyyy-MM-dd EEE hh:mm:ss"  // DateFormatter에 저장된 프로퍼티인 .dateFormat으로 "연도-월-일 x요일 시간:분:초" 포맷을 정해줌.
        
        lblCurrentTime.text = "현재시간 : \(formatter.string(from: date as Date))"  // lblCurrentTime에 텍스트 표기
        // *부연설명 : .string 메서드를 활용해서 formatter의 타입을 String으로 변환시킨다.
*/ 위 과정은 위에 코드 아래부터 보면됨!!

        //알람부분(현재시간부)
        formatter.dateFormat = "hh:mm"      // formatter 의 양식을 "hh:mm"으로 변경
        let currentTime = formatter.string(from: date as Date) // currentTime 상수 선언(시,분 포맷을 포함하고있는)
        
        if alarmTime == currentTime{        // 설정시간 == 현재시간이면 count+= 1을 하도록 함.
            count += 1
            if count % 2 == 1 {         // count 에 2를 나눈 나머지가 1일 때, 화면 반짝이도록 설정
                view.backgroundColor = UIColor.yellow
            }else{
                view.backgroundColor = UIColor.green
            }
        }else{
            view.backgroundColor = UIColor.white    // 해당없으면 배경화면 화이트!
        }
    }
    @IBAction func changeDatePicker(_ sender: UIDatePicker) { 데이트피커 설정시간부 !!
        
        let datePickerView = sender
        let formatter = DateFormatter()
        
        formatter.dateFormat = "yyyy-MM-dd EEE hh:mm"
        
        lblPickerTime.text = "설정시간 : \(formatter.string(from: datePickerView.date))"
        
        
        // 알람부분(설정시간부)
        
        formatter.dateFormat = "hh:mm"    // formatter 의 양식을 "hh:mm"으로 변경
        alarmTime = formatter.string(from: datePickerView.date) // 전역변수에서 지정한 alarmTime 이 (시,분)을 포함하도록 선언
    }

전체코드

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var lblCurrentTime: UILabel!
    @IBOutlet weak var lblPickerTime: UILabel!
    var alarmTime : String = ""
    var count = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // 1초마다 updateTime 함수를 실행시키는 타이머
        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
    }
    @objc func updateTime(){
        
        let date = NSDate()                 // date에게 NSDate() 라는 클래스를 선언한다! -> 현재시간을 가져옴.
        let formatter = DateFormatter()     // formatter에게 DateFormatter()이라는 클래스를 선언한다!
        formatter.dateFormat = "yyyy-MM-dd EEE hh:mm:ss"  // DateFormatter에 저장된 프로퍼티인 .dateFormat으로 "연도-월-일 x요일 시간:분:초" 포맷을 정해줌.
        
        lblCurrentTime.text = "현재시간 : \(formatter.string(from: date as Date))"  // lblCurrentTime에 텍스트 표기
        // *부연설명 : .string 메서드를 활용해서 formatter의 타입을 String으로 변환시킨다.
        
        //알람부분(현재시간부)
        formatter.dateFormat = "hh:mm"      // formatter 의 양식을 "hh:mm"으로 변경
        let currentTime = formatter.string(from: date as Date) // currentTime 상수 선언(시,분 포맷을 포함하고있는)
        
        if alarmTime == currentTime{        // 설정시간 == 현재시간이면 count+= 1을 하도록 함.
            count += 1
            if count % 2 == 1 {         // count 에 2를 나눈 나머지가 1일 때, 화면 반짝이도록 설정
                view.backgroundColor = UIColor.yellow
            }else{
                view.backgroundColor = UIColor.green
            }
        }else{
            view.backgroundColor = UIColor.white    // 해당없으면 배경화면 화이트!
        }
    }
    
    @IBAction func changeDatePicker(_ sender: UIDatePicker) {
        
        let datePickerView = sender
        let formatter = DateFormatter()
        
        formatter.dateFormat = "yyyy-MM-dd EEE hh:mm"
        
        lblPickerTime.text = "설정시간 : \(formatter.string(from: datePickerView.date))"
        
        
        // 알람부분(설정시간부)
        
        formatter.dateFormat = "hh:mm"    // formatter 의 양식을 "hh:mm"으로 변경
        alarmTime = formatter.string(from: datePickerView.date) // 전역변수에서 지정한 alarmTime 이 (시,분)을 포함하도록 선언
    }
}
profile
https://github.com/iOS-Woong

0개의 댓글