[iOS - WWDC2019] UISceneDelegate: Multiple Window๋ฅผ ์ฌ์ฉํ๋ ์ฑ์ ์ค๊ณ
๐ WWDC19 ์ธ์ ์ ๋ฒ์ญํ๋ฉฐ ๊ณต๋ถํ ๊ธ์ ๋๋ค! ์์ญ์ด๋ ์ค์ญ์ด ์์ ์ ์์ผ๋ ์์ธํ ๋ด์ฉ์ ์ธ์ ์์์ ์ฐธ๊ณ ํด์ฃผ์ธ์!
App Delegate์ Scene Delegate
iOS 12๊น์ง์ App Delegate ์ ์ญํ ์ ๋จผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. App Delegate๋ ๋ ๊ฐ์ง ์ฃผ์ํ ์ญํ ์ ๋ด๋นํ๊ณ ์์์ต๋๋ค. ์ฒซ๋ฒ์งธ๋ ํ๋ก์ธ์ค ๋ ๋ฒจ์ ์ด๋ฒคํธ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฆฌ๋ ๊ฒ์ด์์ต๋๋ค. ํ๋ก์ธ์ค๊ฐ ์์๋๊ฑฐ๋, ์ข ๋ฃ๋ ๋, AppDelegate๋ฅผ ํตํด ์ด๋ฒคํธ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ ์ญํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์ UI์ ์ํ๋ฅผ ์ ์ ์๊ฒ๋ ํ๋ ๊ฒ์ด์์ต๋๋ค.
DidEnterForeGround, WillResignActive์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด ์์คํ ์UI์ ์ํ๋ฅผ ์ ์ ์์์ฃ . App Delegate์ ์ด๋ฐ ์ญํ ์ iOS 12๊น์ง๋ ํฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง๊ณ , ์ด ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํด์ ํ๋์ UI๋ฅผ ๊ฐ์ก๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฌ๋ฌ๋ถ๋ค์ด ์ฌ์ฉํ๋ AppDelegate๋ ์๋ง๋ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋์ด์๊ฒ ์ฃ ์๋ฅผ ๋ค์ด, didFinishingLaunchingWithOptions ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๊ณ UI๋ฅผ ์ค์ ํ๋, ์ต์ด 1ํ๋ง ์คํํ๋ ์์
๋ค์ด ์ ์๋์ด ์์ ๊ฒ์
๋๋ค.
์ด๋ฐ ํจํด์ iOS 12๊น์ง๋ ์์ฃผ์์ฃผ ๊ด์ฐฎ์์ต๋๋ค. ํ์ง๋ง iOS 13๋ถํฐ๋ ๋ถ๊ฐ๋ฅํ์ฃ .
์๋ํ๋ฉด ์ด์ ๋ถํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ ํ ํ๋์ ํ๋ก์ธ์ค๋ง์ ์ฌ์ฉํ์ง๋ง, ์ฌ๋ฌ๊ฐ์ Scene ์ธ์ ์ด๋ UI ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ์ ์๊ฒ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ๋ผ์ App Delegate๋ ๋ ์ด์ UI ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ๋ ์์ ๋ค์ ์ฑ ์์ง ์ ์๊ฒ๋ฉ๋๋ค. ๋์ , UISceneDelegate๋ฅผ ํตํด์ UI์ ๊ด๋ จ๋ ์์ ์ ํ๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ฆ, ์ฌ๋ฌ๋ถ๋ค์ด App Delegate์์ ์ ์ํ๋ UI์์ ๋ค์ ๊ทธ์ ๋์๋UISceneDelegate ์ด๋ํด์ผํ๋ค๋ ๋ป์ ๋๋ค.
๋ ์ด์ iOS๋ App Delegate์ ์กด์ฌํ๋ UI๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ์คํํ์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด iOS 13์ ์ํด ๊ตฌํํ๋ฉด iOS 12๋ ํธํํ์ง ๋ชปํ๋๊ฑธ๊น์? ๊ทธ๋ ์ง ์์ต๋๋ค. UIApplicationDelegate์ UISceneDelegate๋ฅผ ๋ชจ๋ ๊ตฌํํด๋๋ฉด, ๋ฐฐํฌํ๋ ๋ฒ์ ์ ๋ง์ถ์ด UIKit์ด ์คํ์ค์ ์์ ์๊ฒ ๋ง๋ ๋ฉ์๋๋ฅผ ์ฐพ์๊ฐ๋๋ค.
AppDelegate๋ ์ถ๊ฐ์ ์ธ ์ญํ ์ ํ๋ ๋ ๋ถ์ฌ๋ฐ์ต๋๋ค. ์ด์ ์๋ก์ด Scene Session์ด ์์๋๊ฑฐ๋ ์ข ๋ฃ๋๋ฉด AppDelegate๋ ์ด์ ๋ํ ์๋ฆผ์ ๋ฐ๊ฒ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ณด์ด๋ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์๋ถํฐ ์คํํด๋ณธ๋ค๊ณ ํฉ์๋ค.
๊ฐ์ฅ ๋จผ์ App Delegate๊ฐ didFinishLaunching์ ๋ฐ์ต๋๋ค. ์ฌ์ ํ UI๊ณผ ๊ด๋ จ๋์ด ์์ง ์์ ์ด๊ธฐ ์ค์ ๋ค์ ์ด๊ณณ์์ ํด์ค ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณง๋ฐ๋ก ์์คํ ์ด Scene Session์ ์์ฑํฉ๋๋ค.
ํ์ง๋ง ์ค์ ๋ก UI Scene ์ ์์ฑํ๊ธฐ ์ ์, ์ ํ๋ฆฌ์ผ์ด์ ์๊ฒ UIScene Configuration์ ์์คํ ์ด ์๊ตฌํฉ๋๋ค. ์ฌ๊ธฐ์ Configuration์ ์ด๋ค ์คํ ๋ฆฌ๋ณด๋๋, Scene delegate, scene์ ์๋ธํด๋์ค๋ค์ Scene๊ณผ ํจ๊ป ์์ฑํ ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ์คํ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๊ณ Scene Session์ด ์์๋ฉ๋๋ค. ํ์ง๋ง ์์ง UI๋ ๋ณผ ์ ์์ฃ . ์ด ์์ ์์ SceneDelegate๊ฐ Scene Session๊ณผ ์ฐ๊ฒฐ๋๋ ์์ ์ด ์์๋ฉ๋๋ค.
UISceneDelegate์์๋ ์ ๋ฌ๋ UIScene ์ ํตํด UIWindow๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ค์ํ ๊ฒ์ ์์ฑ๋ window์ ๊ด๋ จ๋ ์ฌ์ฉ์์ ํ๋์ด๋ ์ํ ๋ณต์์ ํ์ธํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ์ํ๋ฅผ ๋ณต์ํ๋ ๋ด์ฉ์ ์ ์ ๋ค์ ๋ ์์ธํ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค!
์ด์ ์ฌ๊ธฐ์ ์ฌ์ฉ์๊ฐ ์ค์์ดํํด์ ํ์ผ๋ก ๋ค์ ์ด๋ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด์ ์ฒ๋ผ willResignActive์ didEnterBackground ๊ฐ ํธ์ถ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ผ๋ง ์ ๋์ ์๊ฐ์ด ์ง๋๋ฉด ์คํ๋์๋ Scene์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค.
์ฐ๊ฒฐ์ด ๋์ด์ง๋ค๋ ๊ฒ์ ์ด๋ค ๊ฒ์ ์๋ฏธํ ๊น์? Scene ์ด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋จ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ณง sceneDelegate๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๊ณ ์ด sceneDelegate๋ก ์์ฑํ๋ window ๊ณ์ธต๊ณผ ๋ทฐ ๊ณ์ธต๋ค์ด ๋ชจ๋ ํจ๊ป ํด์ ๋จ์ ์๋ฏธํฉ๋๋ค.
์ด๋ฐ ๋ฐฉ์์ ํด๋น Scene๊ณผ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ ์ ์๋๋ก ๋์์ค๋๋ค. ํ์ง๋ง ๋์ค์ ํด๋น Scene ์ด ๋ค์ ์์๋๋ฆฌ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ ๋ณด๋ ์ํ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ญ์ ํด๋ฒ๋ฆฌ๋ฉด ์๋๊ฒ ์ฃ .
์ด๋ฒ์๋ ์ฌ์ฉ์๊ฐ ์ฑ์ ์๋ก ์ค์์ดํํด์ ์์ ํ ์ข
๋ฃํ๊ณ ์ ํ๋ค๋ฉด ์ด๋จ๊น์? ์์คํ
์ App Delegate ์ didDiscardSceneSession์ ํธ์ถํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๋ฐ์ดํฐ๋ ์ํ๋ฅผ ์์ ํ ์ง์ธ ์ ์์ต๋๋ค. ๋ฉ๋ชจ ์ฑ์์ ์์์ ์ฅ๋ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ ๊ฒ ์ฒ๋ผ์.
๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์๊ฐ ์ฑ ์ค์์ณ๋ฅผ ์ด์ด์ ์ค์ ๋ก๋ ์คํ์ค์ด์ง ์๋ ์ฑ์ ์ข ๋ฃํ๊ณ ์ ํ ์๋ ์์ต๋๋ค. ๋ง์ฝ ๊ทธ ํ๋ก์ธ์ค๊ฐ ์คํ์ค์ด์ง ์๋ค๋ฉด, ์์คํ ์ Discarded Session์ ๊ทธ๋๋ก ์ถ์ ํ๊ณ ์๋ค๊ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์์ ๋ค์ ์คํ๋์ ๋ ๋ค์ ํธ์ถํ๊ฒ๋ฉ๋๋ค. (๊ฐ์ธ์ ๊ฒฌํด -> ๋ถํ์ํ๊ฒ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์คํํ๋ ์์ ์ ํ์ง ์๊ณ ๋ค์๋ฒ์ ์คํ๋์์ ๋ ์ด๊ธฐํํ๋ ๊ณผ์ ์ ์งํํ๊ธฐ ์ํด์๊ฐ ์๋๊น์..? ๋ช ํํ ์ด์ ๋ฅผ ์์๋ ๋ถ์ด ๊ณ์๋ฉด ๋๊ธ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋คใ )
์ํ ๋ณต์ํ๊ธฐ
iOS13 ์์๋ Scene์ ๊ธฐ๋ฐ์ผ๋กํ ์ํ ๋ณต์์ด ์์ฃผ ์ค์ํฉ๋๋ค. ์ ์ค์ํ์ง ํ๋ฒ ์์๋ณผ๊ฒ์.
์ฑ ์ค์์ณ๊ฐ ์์ต๋๋ค. ์ฌํ์ ์ค๋นํ๊ณ ์๊ธฐ ๋๋ฌธ์ 4๊ฐ์ ๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์ ์ ์คํํ๊ณ ์์ต๋๋ค. ๋ง์ฝ ์ ๊ฐ ์ฌํ์ค๋น๋ฌผ ๋ฆฌ์คํธ์ ์ผ์ ์ ์ง์คํ๊ณ ์ถ๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋ ์ฌํ ์ธ์ ๊ณผ ์ถ์์ธ์ ์ ์ด๋ค ์์ ์ disconnect ๋๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๊ฒ์ ๋๋ค. ๋ง์ฝ ์ํ ๋ณต์์ ๊ตฌํํด๋์ง ์์๋ค๋ฉด, ๋ค์ ์ฌํ ์ธ์ ์ผ๋ก ์ด๋ํ์ ๋ ์ด์ ์ ์์ ํ๋ ๋ด์ฉ์ ๋ณผ ์ ์๊ฒ๋ฉ๋๋ค. ๋์ ์์ ํ ์๋ก์ด ํ๋ฉด์ด ์์๋๋ฉด ์ด๊ฑด ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ด ์๋ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น์? iOS13 ์ ์๋ก์ด Scene ๊ธฐ๋ฐ ์ํ๋ณต์ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ๊ธฐ์ ์์ฃผ ๋จ์ํ์ฃ . ์ด์ ๋ ์ด์ ๋ทฐ๊ณ์ธต์ ์ธ์ฝ๋ฉํ ํ์๊ฐ ์์ด window๋ฅผ ๋ค์ ์์ฑํ๊ธฐ ์ํ ์ํ๋ฅผ ์ธ์ฝ๋ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ NSUserActivity๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ๊ทธ๋์ ๋ง์ฝ ์ ํ๋ฆฌ์ผ์ด์ ์ด handoff๋ spotlight ๊ฒ์์ ์ฌ์ฉํ๋ค๋ฉด ์ด ํ๋๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ก ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ํ๋ณต์์ ์ํ ์์นด์ด๋ธ๋ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๋ค๊ณผ ๋์ผํ ๋ ๋ฒจ์ ๋ณดํธ๋ฑ๊ธ์ ์์คํ ์ ์ ๊ณตํด์ผํฉ๋๋ค.
์ฝ๋๋ก๋ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์์๊น์? Scene Delegate์์ ์ฐ๋ฆฌ๋ Scene์ ๋ํ ์ํ๋ณต์์ ๊ตฌํํ๊ณ ํ์ฌ window์์ ๊ฐ์ฅ ํ๋ฐํ ์ฌ์ฉ์ ํ๋์ ์ฐพ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ๋์ ๋ฐํํฉ๋๋ค.
์๊ฐ์ด ์ง๋๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ค์ foreground๋ก ๋ค์ด์ค๋ฉด ํด๋น sessiondl ์ํ ๋ณต์ ํ๋์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ์๋ค๋ฉด, ํด๋น ํ๋์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ , ์๋ค๋ฉด ์๋ก์ด window๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ํ๋ฆฌ์ผ์ด์
์ scene์ด ํด์ ๋์๋์ง ์ ์ ์๊ฒ๋ฉ๋๋ค.
Scene๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ
๋ง์ง๋ง์ผ๋ก scene ๊ฐ์ ๋๊ธฐํ๋ฅผ ์ด๋ป๊ฒ ๋ง์ถ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ๋ ๊ฐ์ scene์ด ์๊ณ ๊ฐ scene์ ์๋ก ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ์ scene ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ๊ฒ ์ต๋๋ค. ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ฉด, ํ์ชฝ์๋ง ์
๋ฐ์ดํธ๊ฐ ๋ฉ๋๋ค.
์ ์ด๋ด๊น์?
๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด ๊ฐ์ง๊ณ ์๋ ๊ตฌ์กฐ์ฒ๋ผ, ๋ฒํผ์ด๋ ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ์ด ์ด๋ฒคํธ๋ค์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ ๋ฌ๋๊ณ , ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ UI๋ง ์ ๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ผ๋ฉด ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ์๊ฒ ์๋ ค์ฃผ๋ ๋ฐฉ์์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ๋ ์์ ๊ณผ ๊ด๋ จ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๊ตฌ๋
์๋ค์๊ฒ ์๋ก์ด ๋ฐ์ดํฐ๋ก ์
๋ฐ์ดํธ ํ๋ผ๋ ์๋ฆผ์ ๋ณด๋ด๋ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค. delegate๋ notification์ ์ฌ์ฉํ ์๋ ์๊ณ , combine์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์๋ ๊ฐ๋ณ๊ฒ ์ฌ์ฉํ ์ ์๋ ์์ ๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
์ด ๋ฉ์๋๋ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๋ฒํผ์ด ๋๋ ธ์ ๋์ ์์ ์ ์ ์ํ๊ณ ์์ต๋๋ค. ๋ฉ์์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธ ํ ๋ค์ ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋๋ก ํ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋จผ์ ํด์ผํ ์ผ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์๊ธฐ ์์ ์ ๋ทฐ ์ํ๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ง๊ธ์ ์ผ๋จ ํด๋น ์ฝ๋๋ฅผ ์ง์ฐ๊ณ ์ ์ ๋ค์ ๋ค์ ๋์์ค๊ฒ ์ต๋๋ค.
์ด์ ๋ ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ์ add ๋ฉ์๋๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ๋ณด๊ฒ ์ต๋๋ค. ๋จ์ํ๊ฒ ์๋ก์ด ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋๋ก ํ๊ณ ์์ต๋๋ค.
ํ์ง๋ง ์ด์ ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ๋ ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์ฐ๊ฒฐ๋ scene์ด ์
๋ฐ์ดํธ ๋๋๋ก ์๋ฆผ์ ๋ณด๋ด๋๋ก ํด์ผํฉ๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ์๋ฆผ์ ๋ณด๋ผ ์ ์์ ๊น์? ์ฐ๋ฆฌ๋ ๋๋ฒ๊น ๊ณผ ํ ์คํ ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ผ ์๋ก์ด ํ์ ์ ๋ง๋ค์ด์ ์ ๋ฐ์ดํธ ์ด๋ฒคํธ๊ฐ ์๊ฒผ์ ๋ ์ฌ์ฉํด๋ด ์๋ค.
์ค์ํํธ์ enum๊ณผ associated value๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด์ ์๋ก์ด ๋ฉ์์ง ํ์ ์ด ์๊ฒผ์ต๋๋ค. ์ด ํ์ ์ ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฑํ๊ณ ๊ด๋ จ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ scene์ ์ ์ก๋ฉ๋๋ค.
์ด ๊ฐ์ฒด์ ์ ์ก์ ์ํด์ NSNotificationCenter๋ฅผ ์ฌ์ฉํฉ๋๋ค. post ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ๊ตฌ๋ ์๋ค์๊ฒ ์๋ฆผ์ ๋ณด๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋, ์๊ธฐ์์ ์ ๋ฐ์ ์๋ก ์ ์ํด์ ์๋ฆผ์ ๋ณด๋ ๋๋ค.
์ด์ ๋ชจ๋ธ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ก์ด ๋ฉ์์ง๋ฅผ ๋ฐ์ผ๋ฉด, ์ด ๋ฉ์์ง๋ฅผ ์ ์ฅํ ๋ค์ ์๋ก์ด ์ด๋ฒคํธ๋ฅผ ์์ฑํด ๋ฐํํ๋ฉด ๋ฉ๋๋ค.
์๊น ๋ฏธ๋ค๋์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ ํด๋ด ์๋ค. ์ฐ๋ฆฌ๋ ์๋ก์ด ์ต์ ๋ฒ๋ฅผ ์ถ๊ฐํ๊ณ ํธ๋ค๋ฌ ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ํธ๋ค๋ฌ ๋ฉ์๋๋ Notification ๊ฐ์ฒด๋ฅผ ๋ฐ์ต๋๋ค.
์ด๋ฒคํธ๋ฅผ ๋ฐํํ ๋ ์๋ก์ด ์ด๋ฒคํธ ์์ฒด๊ฐ ๋ฐ์ ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋จ์ํ ๋ฐ์ ์๋ฅผ ํ์ธํ๋ ๊ฒ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ associated value๋ฅผ ๊บผ๋ด์ค๋ฉด ์๋ก์ด ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์๊ฒ๋ฉ๋๋ค. ์ด์ UI๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ๋ค์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ณผ๊น์? ์์ชฝ์ ๋ชจ๋ ์
๋ฐ์ดํธ๊ฐ ๋๋ค์!
์ค๋์ App Delegate์ Scene Delegate์ ์ฑ
์๊ณผ ์ฐจ์ด์ ๋ํด ์ด์ผ๊ธฐํด๋ดค์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ iOS13 ์์์ ์ํ๋ณต์์ด ์ ์ค์ํ์ง ์๋
ผํ์ฃ . ๊ทธ๋ฆฌ๊ณ scene๋ค์ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ๊น์ง ์์๋ดค์ต๋๋ค.
Scene Delegate์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋ค์ด๊ฐ ๋ ์ํ๊ฐ ์ด๋ค์์ผ๋ก ์ ์ง๋๋์ง ์ ๋ชฐ๋์๋๋ฐ ์ฌ๋ฌ๋ชจ๋ก ๊ณต๋ถ๊ฐ ๋ง์ด ๋์๋ ์ธ์
์ด์์ต๋๋ค! ๊ฐ์ธ์ ์ผ๋ก ๋ฒ์ญํ๋ฉด์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ญ์ด๋ ์ค์ญ์ด ์์ ์ ์์ด์! ์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์ธ์~! ์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!