๊ฐ๋ฐ์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด ๋ค์์ ๋ด์ฉ์ด ์๋ค.
Declaration
“์ฑ์ UI์ View์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด์ ๋ํ ๋ฐฐ๊ฒฝ์ด๋ค.”
์ฌ๊ธฐ๊น์ง๋ง ์ฝ์์๋๋ ๊ฐ์ด ์์จ๋ค.
์์ธํ๊ฒ ๋งํ๋ฉด UIKit์ ๋์ ๋ฐฉ์์ View ํผ์์๋ง ์ด๋ฃจ์ง์ ์๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ํจ๊ป ์ด๋ฃจ์ง๋ค. ์ด๋ UIWindow ๋ ์ผ๋ถ ์ฐธ์ฌํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ญ๊ฐ UIWindow๊ฐ UIView๋ณด๋ค ์์ํด๋์ค์ผ๊ฑฐ๋ผ๋ ์ด๋ฏธ์ง๊ฐ ์์๋๋ฐ ๋ฐ๋์๋ค UIWindow๋ UIView์ ํ์ ํด๋์ค๋ค.
UIWindow์ ์๊ฐ์ ์ญํ
UIWindow์ ์ญํ ์ View๋ฅผ ๋ํ๋ด๋ “์ก์" ์ญํ ์ด๋ค.(๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ด๋ ์ปจํ
์ด๋) ๋ฐ๋์ UIWindow๊ฐ ์์ด์ผ ํ๋ฉด์ View๋ค์ ๋์คํ๋ ์ด ํ ์ ์๋ค. window๊ฐ ์ก์๋ผ๋ฉด, ๋ด๋ถ์ ๊ทธ๋ฆผ์ rootViewController
๊ฐ ๋๋ค.
(window์ rootViewController๋ NavigationController, TabBarController, UIViewController ๋ฑ์ด ๋ ์ ์๋ค.)
ํ์ง๋ง UIWindow๋ ์์ฒด์ ์ธ ์๊ฐ์ ์ธ ์์๊ฐ ์๋ค. UIView๋ฅผ ์์๋ฐ์ง๋ง (๋ฐ๋ผ์ window.background = .red
๊ฐ์ ์ฝ๋๋ ์ปดํ์ผ ๊ฐ๋ฅํ์ง๋ง ์๋ฌด๋ฐ ๋ณํ๊ฐ ์๋ค.)
๊ทธ๋ฆฌ๊ณ ์๋ก์ด ํ๋ฉด์ ๋ํ๋ธ๋ค๊ณ ํด์ ์๋ก์ด window ์ธ์คํด์ค๋ฅผ ์์ฑํ๋๊ฒ์ด ์๋๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ์ฑ์์๋ window๊ฐ ๋จ ํ๊ฐ๋ง ์ฌ์ฉ๋๋ค. (์์ธ์ธ ๊ฒฝ์ฐ๋ ๊ธ ์๋ซ๋ถ๋ถ์ ์ ๋ฆฌํด๋์)
UIWindow์ ๊ธฐ๋ฅ์ ์ญํ
UIWindow๋ View๋ค๊ณผ ํจ๊ป ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ฑ ์๋์ ๊ธฐ๋ณธ์ ์ธ ์์
๋ค์ ์ํํ๋ค.
- ๋ค๋ฅธ Window์ ๋ํ Window์ ๊ฐ์์ฑ์ ์ํฅ์ ์ฃผ๋ Window์ z์ถ ์์ค์ ์ค์ ํ๋ค.
- Window์ ํ์ํ๊ณ ํค๋ณด๋ ์ด๋ฒคํธ์ ๋์์ผ๋ก ๋ง๋ ๋ค.
- ์ขํ ๊ฐ์ Window์ ์ขํ๊ณ๋ก ๋ณํํ๊ฑฐ๋ ๊ทธ ๋ฐ๋๋ก ๋ณํ.
- Window์ RootViewController ๋ณ๊ฒฝ
- Window๊ฐ ํ์๋๋ ํ๋ฉด์ ๋ณ๊ฒฝ.
UIWindow์ ํ์ฉ
- ์ฑ ์ฝํ
์ธ ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด main window๋ฅผ ์ ๊ณตํ๋ค.
- ์ถ๊ฐ์ ์ธ ์ฝํ
์ธ ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ window๋ฅผ ์์ฑํ๋ค.(ํ์ํ ๊ฒฝ์ฐ์๋ง)
์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ์์ ๋ค๋ฃจ๋ ์๋์ฐ๋ windows[0] (์๋์ฐ๋ค์ ๋ด๊ณ ์๋ ๋ฐฐ์ด์ค ์ฒซ๋ฒ์งธ์ด๋ฉฐ key window) ์ฃผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค. ํ์ง๋ง ๊ทธ ์ด์ธ์๋ ์๋์ฐ๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ๋ค์ด ์๋๋ฐ, ์๋ฅผ๋ค์ด ํค๋ณด๋๋ ์ฌ๋ผ์ฌ๋ ๋ง๋ค ์๋ก์ด window๋ฅผ ์์ฑํ์ฌ ์ฌ๋ผ์จ๋ค. ๊ทธ๋ฆฌ๊ณ status bar๋ ํ๋์ window์ด๋ค. ๊ทธ๋ฆฌ๊ณ alert๋ window๋ฅผ ๋ง๋ค์ด ์์ฑํ๋ค.
UIWindow ๊ด๋ จ ๋ฉ์๋
UIWindowDidBecomeVisibleNotification
UIWindowDidBecomeHiddenNotification
UIWindowDidBecomeKeyNotification
UIWindowDidResignKeyNotification
Key Window
์ขํ์ ๊ด๋ จ๋ ์ด๋ฒคํธ๋ window
๋ก ์ ๋ฌ๋๋ค. ํ์ง๋ง ์ขํ๊ฐ ์๋ ์ด๋ฒคํธ๋ key window
๋ก ์ ๋ฌ๋ฐ๋๋ค.
๋ค์ ๋งํ๋ฉด, Key Window๋ ํค๋ณด๋, ํฐ์น์ ๊ด๋ จ๋์ง ์์ ์ด๋ฒคํธ(์ขํ์ ๊ด๋ จ ์๋ ์ด๋ฒคํธ)๋ฅผ ์์ ํ๋ค. ์ค์ง ํ๋์ window๋ง key window๊ฐ ๋ ์ ์๋ค.
window์ RootViewController๋ฅผ ๋ณ๊ฒฝํ์ฌ ํ๋ฉด์ ํํ๊ธฐ
UIApplication.shared
์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ํตํด ์ ๊ทผํด์ผํ๋ค.
// MARK: - UIWindow์ rootViewController๋ฅผ ๋ณ๊ฒฝํ์ฌ ํ๋ฉด์ ํ
func changeRootViewController(_ viewControllerToPresent: UIViewController) {
if let window = UIApplication.shared.windows.first {
window.rootViewController = viewControllerToPresent
UIView.transition(with: window, duration: 0.5, options: .transitionCrossDissolve, animations: nil)
}
}
Window๋ฅผ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํด์ผํ๋๊ฒฝ์ฐ?
iOS13๋ถํฐ iPad์์ multi window๋ฅผ ์ง์ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ํด์ Scene delegate๊ฐ ์ถ๊ฐ๋์๋ค.
storyBoard๊ฐ ์์ ๊ฒฝ์ฐ์ Window
iOS ํ๋ก์ ํธ๋ฅผ ์๋กญ๊ฒ ์์ฑํ๊ฒ ๋๋ฉด, ์๋์ผ๋ก main.storyBoard๋ ํจ๊ป ์์ฑ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ์๋จ์ SceneDeleagte๋ฅผ ๊ฑด๋ค์ง ์์๋ ๋๋ค. (์คํ ๋ฆฌ ๋ณด๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก window ํ๋กํผํฐ๊ฐ ์ด๋์
๋ผ์ด์ฆ๋๋ค.)
ํ์ง๋ง, storyBoard์์ด UI๋ฅผ ์ฝ๋๋ก๋ง ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ๋ ์ง์ UIWindow
๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ์ด์ผํ๋ค.
storyBoard๊ฐ ์๋ ๊ฒฝ์ฐ์ Window (์ฝ๋๋ก UI ์์ฑ)
- ์ด๊ธฐ ์์ฑ๋๋ Main.storyBoard ํ์ผ ์ญ์
- info.plist์์
Storyboard Name(key๊ฐ)
์ญ์
- iOS13+ SceneDelegate์์, ์ด์ ๋ฒ์ ์ AppDelegate์์ window ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ฉด ๋๋ค
makeKeyAndVisible - > keyWindow๋ก ์ง์ , ๋ฐ Visibleํ๋๋ก...