UIWindow๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ฐฐ๊ฒฝ(backdrop)์ ์ ๊ณตํ๊ณ , ์ค์ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ํ๋์ ์ ๊ณตํ๋ ๊ฐ์ฒด์ด๋ค.
iOS์ฑ์ ๋ชจ๋ View๋ค์ ์ปจํ
์ด๋ ์ญํ ์ ํ๋ UIWindow ์ธ์คํด์ค๋ฅผ ํ๋ ๊ฐ์ง๋๋ฐ, UIWindow๋ UIView์ ํ์ํด๋์ค์ด๋ฏ๋ก Window ๊ทธ ์ฐจ์ ๋ก View๋ผ๊ณ ํ ์ ์๋ค.
UIWindow๋ View๋ผ๋ ์ฌ์ง์ ๋ผ์๋ฃ๋ ์ก์๋ผ๊ณ ํ ์ ์๋ค.
์ฑ์ด ๋ณด์ฌ์ฃผ๋ ์ฝํ
์ธ ๋ค์ ํฌํจํ๋ ์ญํ ์ ํ๋ค.
๋ทฐ๋ฅผ ํฌํจํ ๋ค๋ฅธ ์ฑ ๋ด ์ค๋ธ์ ํธ๋ค์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํด์ฃผ๋ ํต์ฌ์ ์ธ ์ญํ ์ ํ๋ค.
์ฑ์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ํ๋ฉด ๋ฐฉํฅ์ ํ(landscape & portrait)์ ์ ์ฉํ๊ฒ ํ๊ธฐ ์ํด ํ์
ํ๋ค.
์๋์ฐ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ํจ๊ป ๋์ํ๋ฉด์ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ๊ณ ์ฑ์ ๋์์ ํ์์ ์ธ ์์
๋ค์ ์ํํ๋ค.
UIWindow๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
1. ๋น์ฐํ.. ์ฑ์ ์ฝํ
์ธ ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ์ฌ Main window๋ฅผ ์ ๊ณตํด์ผํ ๋
2. ์ถ๊ฐ์ ์ธ ์ฝํ
์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ window๋ฅผ ์์ฑํด์ผ ํ ๋ (external display๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ)
์์คํ
์ด ์์ฑํ ์๋์ฐ์์ ์์ฑ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ ์๋์ฐ
ํค ์๋์ฐ๋ isKeyWindow๋ผ๋ ์์ฑ์ ํตํด ํ์ธํ ์ ์๋ค.
ํ๋์ ์์ ์๋ ์ค์ง ํ ๊ฐ์ ์๋์ฐ๋ง์ด ํค ์๋์ฐ๊ฐ ๋ ์ ์๋ค.
์ฑ์์ External Display๊ฐ ์๋ ๊ฒฝ์ฐ ์๋์ฐ๋ 1๊ฐ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ฑ์ ๋ฉ์ธ ์๋์ฐ๊ฐ ํค ์๋์ฐ์ด๋ค.
KeyWindow๊ฐ ์ฌ์ฉ๋ ๋
์๋ฅผ ๋ค์ด ํค๋ณด๋ ์ฐฝ์ ์์คํ
์ด ์์ฑํ ์๋์ฐ์ด๋ค.
ํค๋ณด๋ ์ฐฝ์์ ๊ธ์๋ฅผ ์
๋ ฅํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ค์ ์ฑ์ ํค ์๋์ฐ๋ก ์ ๋ฌ์ด ๋๋ค.
UIWindow ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ
๋ณดํต Xcode๋ ํ๋ก์ ํธ๊ฐ ์์ฑ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก AppDelegate์ window ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ window ๊ฐ์ฒด๋ฅผ ๋ ์์ฑํ๊ฑฐ๋ ์์๋ฐ๋ ์ผ์ ์ ์๋ค.
๋ค์์ window ๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋ค๊ฑฐ๋ ๋ง๋ค์ด์ง๋ ๊ฒฝ์ฐ๋ค.
1. ์คํ ๋ฆฌ๋ณด๋๋ฅผ ์ฐ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ฉ์ธ window๋ฅผ ์ง์ ์์ฑํด์ผ ํ๋ค.
2. ์ธ๋ถ ๋์คํ๋ ์ด๋ฅผ ์ง์ํ๋ ์ฑ์ ๊ฒฝ์ฐ ์๋ก์ด window๋ฅผ ๋ง๋ค์ด ๋ณด์ฌ์ค ์ ์๋ค.
3. ๋ณดํต์ ๊ฒฝ์ฐ ์๋ก์ด window๋ ์์คํ
์ ์ํด ๋ง๋ค์ด์ง๋ฉฐ ํน์ ์ด๋ฒคํธ์ ๋ํ ๋ฐ์์ ๋ง๋ค์ด์ง๋ค. ( ์: ์ ํ๊ฐ ์ค๋ ๊ฒฝ์ฐ )
UIWindow ์์ฑํ๋ ๋ฒ
๋ฉ์ธ Window ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋๋ฐ / ์ธํฐํ์ด์ค ๋น๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ๊ณผ ์ค์ ์ ํ ์ ์๊ณ AppDelegate ๊ฐ์ฒด๊ฐ ์ด๊ฒ์ ์ก๊ณ ์์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ์ฒด๋ ์ฑ ์ํ์ ์๊ด์์ด ์ฑ์ด ์คํ๋ ๋๋ ํญ์ ์์ฑํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ถ๊ฐ์ ์ธ window ๊ฐ์ฒด๋ ๊ทธ๊ฒ์ด ํ์ํ ๋ ์์ฑ๋๋๋ก(lazily created) ํด์ผ ํ๋ค.
์คํ ๋ฆฌ๋ณด๋๋ก๋ window๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ ์คํ ๋ฆฌ๋ณด๋ ์์ด ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ๋ฉ์ธ Window ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ฐ๊ฒฐํด๋ณด๊ฒ ๋ค.
1. Info.plist์ Main storyboard file base name์ Main์ ์ง์์ค๋ค.
ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ Xcode๋ ์๋์ผ๋ก Main.storyboard๋ฅผ ํตํด ๋ฉ์ธ window ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ rootViewController๋ฅผ ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฐ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ง์์ค๋ค.
2. window ๊ฐ์ฒด์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐ๊ฒฐํ๋ค.
AppDelegate์ ์ต์
๋ํ window ๊ฐ์ฒด๊ฐ ์๋ค.
๋จ, SceneDelegate ๊ฐ๋
์ด ๋ฑ์ฅํ ์ดํ์๋ SceneDelegate ์ค๋ธ์ ํธ๊ฐ window ์์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
class SceneDelegate : UIResponder , UIWindowSceneDelegate {
var window : UIWindow ?
}
์ฐ๊ฒฐํ๋ ์์
์ UIApplicationDelegate ๋ฉ์๋์ธ DidFinishLaunchingWithOptions์์ ํด์ค ๊ฒ์ด๋ค.
์๋์ ๊ฐ์ด window๊ฐ์ฒด๋ฅผ ์์ฑ๋ง ํ๊ณ ์คํํ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
window ๊ฐ์ฒด๋ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ปจํ
์ด๋ ์ญํ ์ด๊ธฐ ๋๋ฌธ์ rootViewController๋ฅผ ๋ฌด์กฐ๊ฑด ๊ฐ์ ธ์ผ ํ๋ค.
func application( _ application: UIApplication , didFinishLaunchingWithOptions launchOptions: [ UIApplicationLaunchOptionsKey : Any ] ? ) -> Bool {
// Override point for customization after application launch.
window = UIWindow ( frame: UIScreen . main. bounds)
...
return true
}
๊ทธ๋์ ์๋์ ๊ฐ์ด ์์ฑํด๋ UIViewController๋ฅผ ์๋์ฐ์ rootViewController๋ก ์ง์ ํด์ฃผ๋ฉด ์ ์์ ์ผ๋ก ์คํํ๋ค.
ํ์ง๋ง ๊ฒ์ ํ๋ฉด์ด ๋์จ๋ค. ์ฐ๋ฆฌ๊ฐ ์ง์ ํ window๊ฐ ๋ณด์ด์ง ์๋๋ค๋ ์๋ฏธ์ธ๋ฐ ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ window๊ฐ keyWindow๊ฐ ์๋๋ผ๋ ๋ป์ด๋ค. (.isKeyWindow๋ก ํ์ธ ๊ฐ๋ฅํ๋ค.)
์ฌ๊ธฐ์ KeyWindow๋ ํค๋ณด๋ ์ด๋ฒคํธ, ํฐ์น์ ๊ด๋ จ์๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ window๋ฅผ ๋งํ๋ค. ํฐ๋ฆฌ ์ด๋ฒคํธ๋ ํฐ์น๊ฐ ์ผ์ด๋ ๋ฐ๋ก ๊ทธ ์๋์ฐ์๊ฒ ์ ๋ฌ๋์ง๋ง ์ขํ๊ฐ์ด ์๋ ์ด๋ฒคํธ๋ ์ฑ์ keyWindow์ ์ ๋ฌ์ด ๋๋ค. (ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฉ์ธ ์๋์ฐ๊ฐ keyWindow์ผ ๊ฒ์ด๋ค.)
func application( _ application: UIApplication , didFinishLaunchingWithOptions launchOptions: [ UIApplicationLaunchOptionsKey : Any ] ? ) -> Bool {
// Override point for customization after application launch.
guard let window = window else { return true }
window. backgroundColor = UIColor . cyan
var MyViewController = MyViewController ( )
MyViewController . backgroundColor = UIColor . red
window. rootViewController = myViewController
return true
}
์ฐ๋ฆฌ์ window๊ฐ์ฒด๊ฐ keyWindow๊ฐ ๋๊ณ ๋ณด์ด๊ฒ ํ๊ธฐ ์ํด ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด rootViewController์ backgroundcolor์ธ red๊ฐ ๋ณด์ด๊ฒ ๋ ๊ฒ์ด๋ค.
UIWindow๋ ํ์
ํ๋กํผํฐ๋ก window๊ฐ keyWindow๊ฐ ๋๊ฑฐ๋ ๋์ง ์๋์ง, ํ๋ฉด์ ๋ณด์ด๋์ง ์๋ณด์ด๋์ง, ๋๋ ํค๋ณด๋ ๊ด๋ จ Notification์ ๊ฐ๊ณ ์์ด์ ๊ฐ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ต์ ๋ฒ๋ฅผ ์ถ๊ฐํด ์ฝ์ผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ํ๋ ์๋์ฐ์ ์ขํ๊ณ๋ก ๋ฐ๊ฟ์ฃผ๋ convert ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ด ์๋์ฐ ๊ฐ ์ขํ ์ ํ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.