๐ฅ ํค์๋
- Autolayout
- UIViewController LifeCycle
- UINavigatationController
- ํ๋ฉด ์ ํ
- UIKit
๐ฅ ์์ ์ง๋ฌธ์ง
- clipToBounds์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- clipToBounds๋ UIView์ ์์ฑ์ผ๋ก, ๋ทฐ์ ๊ฒฝ๊ณ(bounds)๋ฅผ ๋ฒ์ด๋ ํ์ ๋ทฐ๊ฐ ์๋ฆฌ๋๋ก ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์ด๋ฉฐ, false๋ก ์ค์ ํ๋ฉด ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ๋ถ๋ถ๋ ํ๋ฉด์ ํ์๋ฉ๋๋ค. ๋ฐ๋๋ก true๋ก ์ค์ ํ๋ฉด ๋ทฐ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ๋ถ๋ถ์ด ์๋ ค์ ๋ณด์ด์ง ์๊ฒ ๋ฉ๋๋ค.
- UIKit ํด๋์ค๋ค์ ๋ค๋ฃฐ ๋ ๊ผญ ์ฒ๋ฆฌํด์ผํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ฐ๋ ๋ ์ด๋ฆ์ ๋ฌด์์ธ๊ฐ์?
- UIKit ํด๋์ค๋ค์ ๋ฉ์ธ ์ค๋ ๋(Main Thread)์์ ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ๋ชจ๋ UI ์ ๋ฐ์ดํธ๋ ๋ฉ์ธ ์ค๋ ๋์์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ UI ์์ ์ ํ๋ฉด ์ฑ์ด ์๊ธฐ์น ์์ ๋์์ ํ๊ฑฐ๋ ํฌ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- UIViewController์ LifeCycle์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- UIViewController์ ์๋ช
์ฃผ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- init: ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ด๊ธฐํ ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- loadView: ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํฉ๋๋ค. ์ง์ ์ค๋ฒ๋ผ์ด๋ํ์ง ์๋ ํ ๊ธฐ๋ณธ ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค.
- viewDidLoad: ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ ํธ์ถ๋ฉ๋๋ค. ์ด๊ธฐ ์ค์ ์ด๋ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์ฌ์ฉ๋ฉ๋๋ค.
- viewWillAppear: ๋ทฐ๊ฐ ํ๋ฉด์ ๋ํ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค. ํ์ ๊ณ์ธต ๊ตฌ์กฐ์ ์ถ๊ฐ.
- viewIsAppearing: ๋ทฐ๊ฐ ํ๋ฉด์ ๋ํ๋ ๋๋ง๋ค ํ ๋ฒ ํธ์ถ๋ฉ๋๋ค.
- viewWillLayoutSubviews: ๋ทฐ๊ฐ ํ์ฌ ์ฅ์น์ ๋ฐฉํฅ์ด๋ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ ์ด์์์ ์ ๋ฐ์ดํธํ๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
- viewDidLayoutSubViews:๋ทฐ๊ฐ ๋ ์ด์์ ์ ๋ฐ์ดํธ๋ฅผ ๋ง์น ํ์ ํธ์ถ๋ฉ๋๋ค.
- viewDidAppear: ๋ทฐ๊ฐ ํ๋ฉด์ ๋ํ๋ ํ ํธ์ถ๋ฉ๋๋ค.
- viewWillDisappear: ๋ทฐ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
- viewDidDisappear: ๋ทฐ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง ํ ํธ์ถ๋ฉ๋๋ค.
- deinit: ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- UIViewController์ ์๋ช
์ฃผ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- viewDidLoad๋ ๋ค๋ฅธํ๋ฉด์ผ๋ก ์ด๋ํ๋ค๊ฐ ๋ค์ ๋์์์ ๋ ํธ์ถ์ด ๋๋์?
- ์๋์, viewDidLoad๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ์ ๋ก๋๋ ๋ ํ ๋ฒ๋ง ํธ์ถ๋ฉ๋๋ค. ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ค๊ฐ ๋์์ฌ ๋ ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋์ง ์์๋ค๋ฉด viewDidLoad๋ ๋ค์ ํธ์ถ๋์ง ์์ต๋๋ค. ๋์ viewWillAppear๋ viewDidAppear๊ฐ ํธ์ถ๋ฉ๋๋ค.
- UITableView๋ฅผ ์ฌ์ฉํด๋ณด์
จ๋์?
- ๋ค, ์ฌ์ฉํด๋ณด์์ต๋๋ค. UITableView๋ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ํ ์ด๋ธ ํ์์ผ๋ก ํ์ํ ๋ ์ฌ์ฉ๋๋ ๋ทฐ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์คํฌ๋กค ๊ฐ๋ฅํ ๋ฆฌ์คํธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
- UITableView๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ dataSource๋ฅผ ์ฌ์ฉํ์
จ์ํ
๋ฐ ํ์์ ์ผ๋ก ๊ตฌํํด์ผ ๋๋ ํจ์์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- UITableViewDataSource ํ๋กํ ์ฝ์ ์ค์ํ๊ธฐ ์ํด์๋ ๋ค์ ๋ ๊ฐ์ง ๋ฉ์๋๋ฅผ ํ์์ ์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค:
- tableView(_:numberOfRowsInSection:): ๊ฐ ์น์ ์ ๋ช ๊ฐ์ ํ(row)์ด ์๋์ง ๋ฐํํฉ๋๋ค.
- tableView(_:cellForRowAt:): ๊ฐ ํ์ ํ์๋ ์ ์ ๋ฐํํฉ๋๋ค. ์ฌ๊ธฐ์์ ์ ์ ๋ด์ฉ์ ์ค์ ํฉ๋๋ค.
- UITableViewDataSource ํ๋กํ ์ฝ์ ์ค์ํ๊ธฐ ์ํด์๋ ๋ค์ ๋ ๊ฐ์ง ๋ฉ์๋๋ฅผ ํ์์ ์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค:
- ํ๋ฉด์ ํ push์ present ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Push: UINavigationController์ ์คํ์ ์๋ก์ด ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐํ์ฌ ํ๋ฉด์ ์ ํํฉ๋๋ค. ์ด์ ํ๋ฉด์ผ๋ก ๋์๊ฐ ์ ์๋ ๋ด๋น๊ฒ์ด์ ๋ฐ๊ฐ ํ์๋๋ฉฐ, ํ๋ฉด์ด ๊ณ์ธต์ ์ผ๋ก ์์ด๊ฒ ๋ฉ๋๋ค.
- Present: ํ์ฌ ๋ทฐ ์ปจํธ๋กค๋ฌ ์์ ์๋ก์ด ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ชจ๋ฌ ๋ฐฉ์์ผ๋ก ํ์ํฉ๋๋ค. ๋ทฐ ์ปจํธ๋กค๋ฌ ๊ฐ์ ๊ด๊ณ๊ฐ ๊ณ์ธต์ ์ด์ง ์๊ณ ๋ ๋ฆฝ์ ์ ๋๋ค. dismiss๋ฅผ ํตํด ํ์ฌ ํ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ซ์ ์ ์์ต๋๋ค.
- UINavigationController๊ฐ ์๋ UIViewController์์ push๋ฅผ ํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
- UINavigationController๊ฐ ์๋ UIViewController์์ push๋ฅผ ์๋ํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. pushViewController(_:animated:) ๋ฉ์๋๋ UINavigationController์์๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- UINavigationController๋ ์ฌ๋ฌ๊ฐ์ ViewController๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. push์ pop์ ์ฌ์ฉํ์ฌ ์๋ก์ด ํ๋ฉด์ ๋์ฐ๊ฑฐ๋ ์ข
๋ฃํ๊ฑฐ๋ ํฉ๋๋ค. ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ViewController๋ฅผ ๊ด๋ฆฌํ๋ฉด ํธํ ๊น์?
- ์คํ(Stack) ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ํฉํฉ๋๋ค. ์คํ์ LIFO(Last In, First Out) ๊ตฌ์กฐ๋ก, push๋ฅผ ํตํด ํ๋ฉด์ ์ถ๊ฐํ๊ณ , pop์ ํตํด ๋ง์ง๋ง ํ๋ฉด์ ์ ๊ฑฐํ๋ UINavigationController์ ๋์ ๋ฐฉ์๊ณผ ์ผ์นํฉ๋๋ค.
- Autolayout์์ Leading Constraint ์ Left Constraint์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
- Left Constraint: ์ข์ธก ๊ฒฝ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฝ์ ์ค์ ํฉ๋๋ค. ์ธํฐํ์ด์ค์ ๋ฐฉํฅ์ฑ์ ๊ด๊ณ์์ด ํญ์ ์ข์ธก์ ์๋ฏธํฉ๋๋ค.
- Leading Constraint: ์ธํฐํ์ด์ค์ ์ฝ๊ธฐ ๋ฐฉํฅ์ ๊ณ ๋ คํ์ฌ ์ ์ฝ์ ์ค์ ํฉ๋๋ค. LTR(Left-to-Right) ์ธ์ด์์๋ ์ข์ธก, RTL(Right-to-Left) ์ธ์ด์์๋ ์ฐ์ธก์ ์๋ฏธํฉ๋๋ค. ๊ตญ์ ํ๋ฅผ ๊ณ ๋ คํ ๋๋ Leading Constraint๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
- Safe Area์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Safe Area๋ iOS 11 ์ดํ ๋์ ๋ ๊ฐ๋ ์ผ๋ก, ๋๋ฐ์ด์ค์ ๋ ธ์น, ์ํ ๋ฐ, ํ ์ธ๋์ผ์ดํฐ, ๋๋ ๊ธฐํ UI ์์์ ์ํด ๊ฐ๋ ค์ง์ง ์๋ ์์ญ์ ์๋ฏธํฉ๋๋ค. ๋ทฐ ๋ ์ด์์์ ๊ตฌ์ฑํ ๋ Safe Area๋ฅผ ๊ณ ๋ คํ๋ฉด ๋ค์ํ ๋๋ฐ์ด์ค์์ UI๊ฐ ์ ๋ณด์ด๋๋ก ๋ ์ด์์์ ์กฐ์ ํ ์ ์์ต๋๋ค. Safe Area๋ safeAreaLayoutGuide๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ํ ๋งํ ๊ธ
- UIViewController LifeCycle
https://medium.com/@knoo/viewcontroller-life-cycle-in-ios-29f7da4acfc7
ViewController Life Cycle in iOS
Hello everyone! I’m excited to share my knowledge about the ViewController Life Cycle and how it is organized in Swift. For a deeper dive…
medium.com
๋ฐ์ํ
'TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2024. 09. 25 (0) | 2024.09.25 |
---|---|
[TIL] 2024. 09. 24 (0) | 2024.09.24 |
[TIL] 2024. 09. 20 (0) | 2024.09.24 |
[TIL] 2024. 09. 19 (0) | 2024.09.24 |
[TIL] 2024. 09. 18 (0) | 2024.09.24 |