Animation ๊ณต๋ถํ ๋ ค๊ณ ๋ณด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์๋ช ์ฃผ๊ธฐ์ ๋ํด ์์๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋๋ผ๊ตฌ์! ๋ทฐ ๋จ์๋ง์ ์ ๋๋ฉ์ด์ ์ ์คํํ๊ณ ์ถ์๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ จ๋ ์ฝ๋ฐฑ ๋ฉ์๋๊ฐ ๋ง์์ ์ด๋์ ๋ฃ์ผ๋ฉด ์ข์ ๊น ํ๋ค๊ฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ๋ฆฌํด ๋ดค์ต๋๋ค. ์ฌ์ค... ์ด์ ์ ์ต์ ์จ ๊ณต๋ถํ๋ฉด์ ์ฌ์ฉ ์๊ณ ์๊ธฐ๋ ํ๋ฐ ์ ๋ฆฌํด๋๋ฉด ๋์ค์ ๊ธฐ์ต์ด ์๋ ๋ ์ฐธ๊ณ ํ๋ ค๊ณ ์ ์ด๋ด ๋๋ค..
๐ต์คํํด๋ณด๊ธฐ
์คํ ๋ฆฌ ๋ณด๋์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ฒํผ์ ๋๋ฅด๋ฉด ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก ์ด๋ํ๋๋ก ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
(์คํ ๋ฆฌ ๋ณด๋ ์ฌ์ฉํ์ง ์ผ๋ง ์๋์.. ์ค๋ฆฐ์ด ์
๋๋ค)
SubViewController.swift ํ์ผ์ ์ถ๊ฐํด ์ค๋๋ค
์ด๋ํ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ํํด ์ฃผ์๊ณ
identity ์ธ์คํํฐ์์ class๋ฅผ ๋ฐฉ๊ธ ์์ฑํ ์ค์ํํธ ํ์ผ๊ณผ ๋์ผํ ํ์ผ๋ช ์ ์ ์ด ์ค๋๋ค.
์ฒซ ๋ฒ์งธ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ปค์คํ ํด๋์ค๋ ViewController๋ฅผ ์ ์ด ์ฐ๊ฒฐ ์์ผ ์ค๋๋ค.
import UIKit
class ViewController: UIViewController {
override func loadView() {
super.loadView()
print("view load view")
}
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("view Will Appear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("view did appear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("view will disappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("view did disappear")
}
deinit {
print("์ฒซ ๋ฒ์งธ ๋ทฐ์ปจํธ๋กค๋ฌ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ง ๋จ")
}
}
ViewController.swift์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์๋ช ์ฃผ๊ธฐ์ ์ฐ๊ด๋์ด ์๋
๋ฉ์๋๋ฅผ ์์ ๊ฐ์ด ์ ์ด ์ฃผ๊ฒ ์ต๋๋ค.
import UIKit
class SubViewController: UIViewController {
override func loadView() {
super.loadView()
print("second view load view")
}
override func viewDidLoad() {
super.viewDidLoad()
print("second view did load")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("second view Will Appear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("second view did appear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("second view will disappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("second view did disappear")
}
deinit {
print("๋๋ฒ ์งธ ๋ทฐ์ปจ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ง ๋จ")
}
}
์คํํ๊ณ ๋น๋ํด์ฃผ์ธ์
ViewController ๊ฐ ๋ก๋๋๋ฉด
loadView() -> viewDidLoad() -> viewWillAppear() -> viewDidAppear() ์์ผ๋ก ํธ์ถ ๋๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด์ ๋๋ฒ์งธ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ฅผ ๋์ฐ๊ธฐ ์ํด ๋ฒํผ์ ๋๋ฌ ๋ด ๋๋ค.
์ด ์ญ์ loadView() -> viewDidLoad() -> viewWillAppear() -> viewDidAppear() ์์ผ๋ก ํธ์ถ๋ฉ๋๋ค
์ฒซ๋ฒ์งธ ๋ทฐ ์ปจํธ๋กค๋ฌ์ deinit์ด ํธ์ถ ๋์ง ์์ ๊ฒ์ผ๋ก ๋ณด์
ํ๋ฉด์์ ์ฌ๋ผ์ง๋ค๊ณ ํด์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ง๋๋ ๊ฒ์ ์๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ๋ทฐ์ปจํธ๋กค๋ฌ๋ฅผ ๋ฐ์ผ๋ก ๋๋๊ทธ ํด์ ํ๋ฉด์์ ๋ด๋ฆฌ๊ธฐ ์์ํ๋ฉด viewWillDisappear()์ด ํธ์ถ๋ฉ๋๋ค
๊ทธ ํ ์์ ํ ํ๋ฉด์์ ๋ณด์ด์ง ์๊ฒ ๋๋ฉด viewDidDisappear() ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
์ด๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ง๋๊ฒ๋ ํ์ธํ ์ ์์ต๋๋ค.
๋ค์ ๋ฒํผ ๋๋ฌ ๋๋ฒ์งธ ๋ทฐ ํ๋ฉด์ ๋์ด ๋ค
๋๋ฒ์งธ ๋ทฐ๋ฅผ ์ก๊ณ ๋ด๋ฆฌ๋ค๊ฐ ๋ค์ ์ฌ๋ฆฌ๋ฉด
viewWillDisappear() ํธ์ถ๋์๋ค๊ฐ
viewWillAppear() -> viewDidAppear()์ด ๋ค์ ํธ์ถ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ ์ ์๋ ๊ฒ์ viewDidLoad()๋ ์ ์ฒด์ ๊ฑธ์ณ ํ๋ฒ๋ง ํธ์ถ ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ฉด์ viewWillAppear()๋ ๋ทฐ๊ฐ ํ๋ฉด์ ๋ณด์ฌ์ง ๋๋ง๋ค ํธ์ถ๋ฉ๋๋ค.
๐ ์ ๋ฆฌ
๐ ์ถ์ฒ ๋ฐ ์ฐธ๊ณ ์ฌ์ดํธ
loadView()
- ํ๋ฉด์ ๋์ด์ง view๋ฅผ ๋ง๋๋ ๋ฉ์๋ -> nib ์์ฑํ์ง ์๊ณ ํ๋ก๊ทธ๋๋ฐ ์ ์ผ๋ก ๋ทฐ ๊ณ์ธต์ ๋ง๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ๋ทฐ ์ปจํธ๋กค๋ฌ์ view๋ฅผ ๋ง๋๋ ์์ ์ด๋ฏ๋ก ๋ทฐ์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ป์ด์ฌ ์ ์์
viewDidLoad()
- ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ(๋ก๋)๋ ์์ -> ๋ทฐ์ ๋ํด ์ ๊ทผํ์ฌ ๊ฐ์ ์ป์ด์ ์ถ๊ฐ์ ์ธ ์์ ๊ฐ๋ฅ
- ์๋ช ์ฃผ๊ธฐ ๋ด ํ ๋ฒ๋ง ํธ์ถ
- outlet์ด ๋ฉ๋ชจ๋ฆฌ์ ์์นํ๊ณ ์๋ ์์
- ํ๋ฉด์ ๋ณด์ฌ์ง๊ธฐ ์ ์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉ ํด์ฃผ๋ ์ฝ๋ ๊ฐ๋ฅ
- ํ๋ฉด ๋ก๋ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํด์ค ์์ ์ ์์น์ํด
viewWillAppear()
- ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ํ๋ฉด์ ๋ํ๋๊ธฐ ๋ฐ๋ก ์ง์ -> ๋ทฐ ์ปจํธ๋กค๋ฌ ๋ํ๋๊ธฐ ์ง์ ๋ง๋ค(๋ค๋ฅธ ํ๋ฉด ๊ฐ๋ค๊ฐ ๋ค์ ๋์์ฌ ๋) ์คํ๋์ด์ผ ํ๋ ์์ ์ ์ด ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ
- ๋ฐ์ดํฐ์ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ง
- window์ root view๊ฐ ๋ทฐ ๊ณ์ธต์ ๋ํด์ง๊ธฐ ์ง์ ํธ์ถ๋๋ ๋ฉ์๋
viewDidAppear()
- ๋ทฐ๊ฐ ๋ฐ์ดํฐ์ ํจ๊ป ์์ ํ ํํ๋๋ ์์ ์ด๋ฉฐ ์ด๋ ํธ์ถ๋๋ ๋ฉ์๋
- ์ ๋๋ฉ์ด์ ์ ๊ทธ๋ฆฌ๊ฑฐ๋ API์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ก ํ๋ฉด์ ์ ๋ฐ์ดํธ ํ ๊ฒฝ์ฐ ํด๋น ๋ฉ์๋์ ๊ตฌํ
- window์ root view๊ฐ ๋ทฐ ๊ณ์ธต์ ๋ํด์ง ์ง ํ ํธ์ถ๋๋ ๋ฉ์๋
viewWillDisappear()
- ํ๋ฉด์์ ์ฌ๋ผ์ง๋ ค๋ ์์ ์ ํธ์ถ๋จ
- ๋ทฐ ๊ณ์ธต์์ root view๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ง ์ ์ ํธ์ถ๋๋ ๋ฉ์๋
viewDidDisappear()
- ๋ทฐ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ณ ๋์ ํธ์ถ๋๋ฉฐ ๋ทฐ ๊ณ์ธต์์ ์ ๊ฑฐ๋ ์ง ํ ํธ์ถ
deinit
- ํ๋ฉด์์ ์ฌ๋ผ์ง๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ง๋๋ ๊ฒ์ ์๋
- ๋ฉ๋ชจ๋ฆฌ์์ ํด์ง๋ ์์ ์์ ํธ์ถ
๊ฒฐ๋ก : ์ ๋๋ฉ์ด์ ์ด ๋๋ฌด ๋นจ๋ฆฌ ํธ์ถ๋๋ ํ๋ฉด์ ๋ณด์ฌ์ง์ง ์์ผ๋ฏ๋ก ๋ทฐ๊ฐ ํํ๋๋ ์์ ์ธ viewDidAppear()์์ ๋ทฐ๊ฐ ๋ํ๋ฌ์ ๋ ๋จ๋ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๋ฉด ๋๋ค.
๐ฎ UIViewController
์ ์
UIKit app์์ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ค๋ธ์ ํธ
View Controller ์ ๋ฉ์ธ ์ญํ
1. ๋ทฐ ์ปจํ ์ธ ์ ๋ฐ์ดํธ
2. User Interaction์ ์๋ต
3. ์ ๋ฐ์ ์ธ ์ธํฐํ์ด์ค ๋ ์ด์์ ๊ด๋ฆฌ
4. ๋ค๋ฅธ ์ค๋ธ์ ํธ์์ ์กฐ์
ViewController type
1. Content view controller
ใด ์ฑ์ ์ปจํ ์ธ ์ผ๋ถ๋ถ์ด๋ ์์ ์ ๋ชจ๋ ๋ทฐ๋ค์ ๊ด๋ฆฌ
2. Container view Controller -> navigation view controller, tab bar view controller
ใด ์ฌ๋ฌ๊ฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ์ดํจ
View Management
- ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ ์ง์ฐ ๋ก๋ฉ -> ํ์ํ ์์ ์ ๋ก๋ฉ ๋จ
Specify the views for a view controller
1. ์คํ ๋ฆฌ ๋ณด๋ ์ฌ์ฉ
- ์คํ ๋ฆฌ ๋ณด๋์ ์๋ view๋ฅผ ๊ตฌ์ฒดํ ํ๋ฉฐ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ปค๋ฅ์ ๊ฐ๋ฅ
- instantiateViewController(withIdentifier:)
2. Nib file ์ฌ์ฉ
- nib file์ ์ฑ๊ธ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ทฐ ๊ตฌ์ฒดํ ๊ฐ๋ฅ
- ๋ทฐ ์ปจํธ๋กค๋ฌ ๊ฐ์ ์ธ๊ทธ์จ์ด ์ ์๋ ๋ถ๊ฐ
- nib(nibName:bundle:) ๋ฉ์๋๋ก ๋ทฐ ์ปจํธ๋กค๋ฌ ํด๋์ค ๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ ์ผ๋ก ์์ฑ ๊ฐ๋ฅ
- ๋ทฐ ์์ฒญ -> nib ํ์ผ๋ก ๋ถํฐ ๋ทฐ ์ปจํธ๋กค๋ฌ ๋ก๋
3. loadView()
- ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ๊ตฌํ
>>> ํ๋ฆฐ ๋ด์ฉ ์๋ค๋ฉด ๊ผญ ์ง์ ๋ถํ๋๋ฆฝ๋๋ค! ๐
๋๊ธ