DatePicker를 활용해서 선택한 시간에 화면이 반짝거리는 알람을 만들어보자!
먼저, DatePicker 1개와 Label 2개를 구성해준다.
상단라벨 : lblCurrentTime --- (현재시간이 표기될 부분)
하단라벨 : lblPickerTiem --- (설정한시간이 표기될 부분)
액션 : changeDatePicker --- (데이트피커 시간설정 액션)
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은 뭔데 대체? 와씨
/*
*간단답변 : 모르겠음 멘토님에게 슬랙으로 물어봤고 답변을 기다리는 중....~!
*/
(+추가) 카톡방에 물어봤더니 이렇게 답변이 왔다!
@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))"
}
현재시간 == 설정시간 일 때, 알람이 깜빡깜빡거리게 만들어준다!
@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 이 (시,분)을 포함하도록 선언
}
}