๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
๋ฌธ์
๋ฐ์ดํฐ ํผ์ปค๋ฅผ ์ด์ฉํ์ฌ ์๊ฐ์ ์ ํํ๊ณ , ์ ํ ์๊ฐ 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)
}
- ์ ๋ฌ๋ ์ธ์๋ฅผ ๋ณ์์ ์ ์ฅํ๋ค.
- ๋ ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํ์์ด ํ์ํ๋ฐ, ํ์ ์ง์ ์ ์ํด DateFomatter ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
- DateFomatter.dateFomat ์ ์ด์ฉํด ๋ ์ง ํ์ ์ง์
- ์์ธ ๋ณ์.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ํ