[iOS] Datepicker를 이용한 알람시계 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
import UIKit
class ViewController: UIViewController {
@IBOutlet var IbCurrentTIme: UILabel!//현재시간
@IBOutlet var IbPickerTime: UILabel! //선택시간
@IBOutlet var countTime: UILabel!
let timeSelector: Selector = #selector(ViewController.updateTime)
let interval = 1.0 //타이머 간격 값
var count = 0 //타이머가 설정한 간격대로 실행되는지 확인하기 위한 변수
var alarmTime: String?
var mTimer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
//타이머 설정
Timer.scheduledTimer(timeInterval: interval, target: self, selector: timeSelector, userInfo: nil, repeats: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func changeDatePicker(_ sender: UIDatePicker) { //데이트피커 액션함수
let datePickerView = sender
let formatter = DateFormatter()
// 날짜를 출력하기 위해 클래스 상수 선언
formatter.dateFormat = "hh:mm aaa"
//형식 지정해주기 "년-월-일 시:분:초 요일"
}
@objc func updateTime() {
// countTime.text = "count: " + String(count)
// count = count + 1
//타이머 처리 확인
let date = NSDate() //현재시간 가져오기
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm aaa"
if(alarmTime == currentTime) {
view.backgroundColor = UIColor.gray
} else {
view.backgroundColor = UIColor.white
}
}
}
}
|
오늘은 알람을 맞출 시에 쓰이는 기능인 날짜와 시간 선택 기능을 가지고 있는 DatePicker를 이용해서 알람 시계를 구현해보았다. 책을 참고하여 예제 문제까지 풀어본 것의 결과이다.
코드 작성 시에 의문 나는 점을 몇가지 찾아보았다.
1. 변수 선언시 let 과 var의 차이
똑같은 변수 선언의 방식이지만 아래와 같은 차이점이 존재한다.
ex1)
var name = "kim"
name = "dodo"
위의 코드는 가능하다. var는 한마디로 고정되지 않고 바꿀 수 있는 변수이다.
그러나 let은 아래와 같이 다르다.
ex2)
let name = "kim"
name = "dododo"
이 코드는 대입이 불가능하여 오류가 난다. 한마디로 선언된 변수를 바꿀 수 없다는 차이가 있다.
하지만 아래와 같은 경우는 허용된다.
<변수에 개체 대입을 할 경우>
ex3)
let a = a1()
a = a2()
우선 이러한 코드는 위와 같은 맥락으로 불가능하지만,
let a:person = person()
person.name = 'kim'
이렇게 멤버에 접근해서 값의 변경은 가능하다는 뜻이다.
<let 함수를 쓰면 좋은 점>
- C언어에서 비슷한 것으로 const가 있다
- 메모리 누수를 방지하려는 목적
- let으로 선언된 변수는 소모시접을 예측할 수 있음
- 그래서 여러 변수 대입 과정에서 포인터를 잃어버리는 불상사 예방
- 또한 메모리 크기가 딱 정해져 있는 것이 이점이다.
2. Sender의 의미?
sender는 이 메소드의 caller이다. 이것을 통해서 어떤 버튼, 어떤 개체가 동작을 했는지 확인할 수 있다.
예를 들어 어떠한 객체의 동작을 위해 사용자가 그것을 누르는 동작을 했을 경우 sender를 이용하여 그 객체에 맞는 동작의 코드를 실행하게 해주는 파라미터의 역할을 한다.
3. 알람 기능
구현한 기능은 현재시간과 선택시간을 보여주고, 이 현재시간과 선택시간이 일치할 경우 화면의 색이 변하는 기능을 구현했다. 위와 같이 시간이 일치하게 되면 화면 색이 회색으로 변하고, 해당 시간이 지나면 다시 화면의 색이 원래대로 돌아온다. 사실 이 부분에서 고민을 많이 했다. count 변수를 선언하여 60초가 되면 다시 하얀 바탕으로 돌아오는 코드를 생각했지만 두 개의 시간 변수를 돌릴 수 없어 난관에 부딪혔다. 그런데 결국 같으면 회색, 같지 않으면 하얀색으로만 바꾸면 되는 코드였는데, 다른 함수까지 찾아보며 어렵게 생각했던 것 같다. 하지만 이 과정에서 알아낸 코드가 있으므로 이것에 대해서도 설명하겠다.
4. despatchqueue
DispatchQueue.main.asyncAfter(deadline: .now() + 600){
self.view.backgroundColor = UIColor.white
}
}
이 함수는 구현했던 함수의 일부이다. 예전에 dispatch_queue_main... 대략 이런 내용의 이렇게 쓰는 일정 시간 지속 후 실행되게 하는 코드가 swift 3버전부터 바뀌었다고 한다. 이에 대해 관련 정보가 적어 꽤나 고생했다.
600을 줌으로써 해당 시간으로부터 60초 지연 후에 화면이 다시 화이트로 바뀌게 된다.
'Undergraduate Records' 카테고리의 다른 글
[Arduino] 두더지 게임&기억력 게임 만들기 (0) | 2019.07.09 |
---|---|
1회차 결과 보고서 (0) | 2019.07.08 |
[Baekjoon] for문 문제 (0) | 2019.07.08 |
[Baekjoon] if문 알고리즘 문제 (0) | 2019.07.06 |
[Algorithm]알고리즘 시간 복잡도 계산하기 (0) | 2019.07.06 |