๐ชด Summary
- ์ฑ์ ์๋ช ์ฃผ๊ธฐ (App Life Cycle)
- App Delegate์ Scene Delegate
- iOS13, iOS14 ํน์ง
- available attribute keyword (์ฝ๋์ ๋ฒ์ ๋์์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?)
- Not Running์ธ์ง Background์ธ์ง ๊ทธ ์ํ๊ฐ ๊ถ๊ธํ๋ค.
- ๋คํฌ๋ชจ๋์ ์ปฌ๋ฌ ์ง์
- ๊ฐ๋ก๋ชจ๋
- Project, Target
- UIWindow
- sleep() ๋ฉ์๋๋ฅผ ์ด์ฉํด Launch Screen ๋์ ์๊ฐ ์กฐ์
- IBOutlet์ด ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ์ด ์ ๋์ง ์์๋
- UITextField, UIButton
- IBOutlet๊ณผ IBAction
- ํค๋ณด๋ ๋ด๋ฆฌ๊ธฐ์ Tap Gesture
๐ Detail
TIL์ ๋๋ฌด ๋ง์ ๋ฆฌ์์ค๋ฅผ ๋ค์ด์ง ๋ง์๋ค.
์ฑ์ ์๋ช ์ฃผ๊ธฐ (Life Cycle)
๋ค์ ํ์ผ๊ณผ ๊ด๋ จ์ด ์๋ค.
- AppDelegate.swift
- SceneDelegate.swift
์ฑ์ 5๊ฐ์ง ์ํ
์ฑ์ ์๋ช ์ฃผ๊ธฐ๋ 5๊ฐ์ง๋ก ๋๋๊ธฐ ์ด์ ์ ์คํ/์ข ๋ฃ ๊ทธ๋ฆฌ๊ณ Foreground/Background ์ํ๋ก ๋๋๋ค.
์ฑ์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ ํ๊ฐ ์ค๊ฑฐ๋, ์๋ฆผ์ด ์ธ๋ฆฌ๊ฑฐ๋ ๋๋ ๋ค๋ฅธ ์ฑ์ผ๋ก ์ ํํ ๋ ๋์์ด ๋ฌ๋ผ์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์์ดํฐ์ ํ๋ฉด์ ํ๋์ด๊ธฐ ๋๋ฌธ์ ์ด ํ ํ๋ฉด์ ์ฐจ์งํ๊ธฐ ์ํด์๋ ์ฑ ๋ง๋ค ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ๊ฒ๋ ํ์ํ๊ณ , ์ฑ ๋ด์์๋ ํ์ฌ ์ด๋ค ํ๋ฉด์ด ๋ณด์ฌ์ ธ์ผ ํ ์ง๋ ์ค์ํ ๋ถ๋ถ์ด ๋๋ค. ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ๋ถ๋ถ์ด ์ฑ์ ์ํ, ์ฆ ์๋ช ์ฃผ๊ธฐ์ด๋ค. ์ฑ์ ์ํ๋ ํฌ๊ฒ ๋๋๋ฉด ์ฑ์ ์ฌ์ฉํ๊ณ ์์ ๋(ํ๋ฉด์ ์ฑ์ ๋์ด ์ํ), ์ฑ์ ์ฌ์ฉํ๊ณ ์์ง ์์ ๋๋ก ๋๋ ์ ์๋ค. ์ข ๋ ๋ํ ์ผํ๊ฒ ๋๋๋ฉด 5๊ฐ์ง ์ํ๋ก ๋๋ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ๋ค๋ฅธ ๊ธ์์ ์ดํด๋ณด๊ณ ์ ํ๋ค.
- Not Running
์ฑ์ด ์คํ๋์ง ์๊ฑฐ๋, ์ข ๋ฃ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค. - Active
Active ์ํ์ธ ์ฑ์ ํ๋์ด๋ค. - Inactive
์ ํ๊ฐ ์ค๊ฑฐ๋ ๋๋ ์๋์ด ์ธ๋ฆฌ๊ฒ ๋๋ฉด ์ฐ๋ฆฌ๊ฐ ์ปจํธ๋กค ํ ์ ์๋ ์ํ๊ฐ ๋๋ค. ๋ค์ ์ฑ์ ์ฌ์ฉํ๊ฒ ๋๋ ์๊ฐ Active๋ก ๋์์ค๊ฒ ๋๋ค.
Active์ Inactive ์ํ๋ฅผ ๋ฌถ์ด์ Foreground๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Background
์ฑ์ด ํ๋ฉด์ ๋ณด์ด์ง ์์ง๋ง ์ฝ๋๋ฅผ ์คํํ๊ณ ์๋ ์ํ๋ฅผ ๋งํ๋ค. - Suspend
์๋์ผ๋ก ์ฑ์ ์ง์ฐ๊ฒ ๋๋ฉด Suspend ์ํ๊ฐ ๋๋ค. ์์คํ ์ด ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์ฑ์ ์์ ํ ์ข ๋ฃํ๊ฒ ๋๋๋ฐ ์ด ๋ ์ฑ์ Not Running ์ํ๋ก ์ ์ด๋๊ฒ ๋๋ค.
App Delegate์ Scene Delegate
AppDelegate
- ์ฑ์ ์คํํ๊ณ ์ข ๋ฃํ๋ ๊ฒ๋ง ๋ด๋น (iOS 13.0 ~)
๊ฐ ๋ฉ์๋(- ๋ผ์ดํ ์ฌ์ดํด)์์ ์ด๋ค ํ์๋ฅผ ํ ์ ์์์ง ๊น๊ฒ ๊ณ ๋ฏผํด ๋ณธ ์ ์์๋๋ฐ ์ค๋ ์์น ๊ฐ์์์ ์์๋ก ๋ค๋ ค์ฃผ์ ๋ด์ฉ์ด ํฅ๋ฏธ๋ก์์ ๊ฐ์ ธ์๋ณด์๋ค.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// - ์ฌ์ฉ์ ์ ๋ณด ์ฒดํฌ
// - ๋ฐ์ดํฐ ์ฒดํฌ
// - ์
๋ฐ์ดํธ ์ต์ ํ ํ์ธ
// ์ํํ ์ ์๋ค. (์ด ์๊ฐ ๋์ ์ด๋ค ๋ก์ง๋ ์ํ๋์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ก์ง์ด ๋ณต์กํ๋ฉด ์ง์ํ๋ ๊ฒ์ด ์ข๋ค.)
sleep(2)
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
// - ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ๋ก ๋ค์ด๊ฐ ๋
// - Melon, Youtube : ๋ง์ฝ์ ์ฌ์ฉ์๊ฐ ํ๋ฆฌ๋ฏธ์ ๊ฒฐ์ ์์ด๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์๊ฐ๋๋ก(play) ํ๊ณ ,
// - ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์ค๋จ(stop)์ํค๋ผ๊ณ ๋ถ๊ธฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
}
// โ๏ธ ์์๊ฐ ๋๋ฌด ํฅ๋ฏธ๋กญ๋ค.
func applicationWillEnterForeground(_ application: UIApplication) {
// - ํ๋ฆฌ๋ฏธ์ ๊ฒฐ์ ์๊ฐ ์๋ ์ ์ ์๊ฒ ๊ฒฐ์ ์ ๋ ํ์
์ ๋์ธ ๋ ์ฌ์ฉํ ์ ์๋ค. (Background -> Active)
// - ์นด์นด์คํก ์ฌ์ฉ ์ : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฑ ์ฌ์ฉ ์ํ๋ก ๋ค์ ๋์์ฌ ๋ ์ ๊ธ ํ๋ฉด์ ๋์ฐ๋ ์ํฉ
// - ๊ธ์ต ์ฑ ์ฌ์ฉ ์ : ๋ฐฑ๊ทธ๋ผ์ด๋์ ์์ ๋, ํ๋ฉด์ด ์ ๋ณด์ด๋๋ก ์ฒ๋ฆฌ (ํ๋ฉด ํ๋๋ฅผ ์์ชฝ์ ์์ฐ๋ ์์ผ๋ก ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ค์ ์ฑ์ด ์คํ๋๋ฉด ํ๋ฉด์ ๊ฑท์ด๋ด๋ ์์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ)
}
SceneDelegate
- ์ฑ์ ํ๋๋ง ์คํํ๋ค๊ณ ํ๋๋ผ๋ Scene ๋จ์๋ก ๋์ํ๋ค. (iOS 13.0 ~)
- ํ๋ฉด์ ์ํ ์ ํ, ๋ผ์ดํ ์ฌ์ดํด์ ๋ด๋นํ๋ค. ๊ธฐ์กด AppDelegate๊ฐ ๋ด๋นํ๋ ์ผ์ด ๋์ด์๋ค.
- SceneDelegate๋ฅผ ์์ ์ฐ์ง ์์ ์๋ ์๋ค. ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์์ฆ์๋ ๊ทธ๋ ๊ฒ ์ ํ์ง ์๋ ์ถ์ธ์ด๋ค.
iOS13
Scene ๊ฐ๋ ์ ๋ฑ์ฅ
iPad OS์ ๋์ ๋ ์๋ก์ด ๋ค์ค ์ฐฝ ์ง์๊ธฐ๋ฅ์ด ์ ์ฉ๋ ๊ฒฐ๊ณผ๋ค. ๊ทธ ๊ฒฐ๊ณผ AppDelegate์ ์์ ์ ๋๊ฐ๋ก ๋ถํ ํ๋ค. AppDelegate๋ ์ ํ๋ฆฌ์ผ์ด์ life Cycle ๋ฐ ์ค์ ์ ๋ด๋นํ๊ณ , SceneDelegate๋ ํ๋ฉด (Scenes)์ ํ์๋๋ ๋ด์ฉ์ ์ฒ๋ฆฌํ๊ณ ์ฑ์ด ํ์๋๋ ๋ฐฉ์์ ๊ด๋ฆฌํ๋ค.
์๋๋ ๊ฒฐ๊ตญ ๋ค ๊ฐ์ ๋ง์ด๋ค..ใ ใ Scene์ด ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํด์ง ์ผ์ด๋ค.
- ๋ค๋ฅธ ์ฑ ํ๋ฉด์ 2๊ฐ ์ด์ ๋์ฐ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก๋ค. (iPad OS์ ๋ฑ์ฅ)
- ๋์ผํ ์ฑ์ 2๊ฐ ์ด์ ๋์ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํด์ก๋ค.
- Active ์ํ์ ์ฑ์ด 2๊ฐ ์ด์์ด ๋ ์ ์๋ค.
๋์ผํ ์ฑ์ 3๊ฐ ์ด์ ๋์ ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ํ๋๋ Background, ํ๋๋ Foreground, ํ๋๋ Suspend ์ํ๊ฐ ๋ ์ ์๋ค. ๊ทธ๋ผ ์ด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์๊น. ์ฌ๊ธฐ์ Scene(Session)์ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ฒ ๋๋ค. iPad์์ ์ฑ์ ๋์ฐ๋ ๊ฒ์ Scene์ ๋์ด๋ค์ ๊ฐ๋ ์ด ๋๋ค.
App Delegate ์คํ ์ดํ์ Scene Delegate์๊ฒ ๊ถํ์ ์์ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ผ์ด 2๊ฐ๋ก ๋๋๋ค. ์๋ก ์ญํ ์ ๋ถ๋ฆฌํ๊ฒ ๋ ๊ฒ์ด๋ค. ์ํ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 12.4๋ก os๋ฅผ ์คํํ๋ฉด ๊ธฐ์กด์๋ SceneDelegate ํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฒ์ ๋ง๋ค ๋ฒ๊ฑฐ๋กญ๊ฒ ๋ถ๊ธฐ์ฒ๋ฆฌ๊ฐ ๋ค์ด๊ฐ์ผ ํ๋๊น iOS12๊น์ง ๋ฐ๋์ ๋์์ ์์ผ์ผ ํ ๊น์ ๋ํ ๋ฌผ์์ด ์๊ธด๋ค. ์ด์ ์ฌ์ฉ์์ ๊ธฐ๊ธฐ ๋ฒ์ ์ ๋ฐ์ดํธ๋ ์ด๋ ์ ๋ ๋์๊ธด ํ์ง๋ง ์์ง๊น์ง๋ ์ด๋ ์ ๋ ๊ณ ๋ ค๋ฅผ ํด์ค์ผ ํ ๊ฒ์ด๋ค.
๋คํฌ๋ชจ๋
iOS13๋ถํฐ ์ง์ํ์ฌ, ์์คํ ์ ์ผ๋ก ์ ์ฉ์ด ๋์๋ค. Xcode์ ๋ํดํธ ์ค์ ์ ๋ผ์ดํธ๋ชจ๋, ๋คํฌ๋ชจ๋๋ฅผ ๋ชจ๋ ์ง์ํ๋ ์ํ์ด๋ค. ๊ทธ๋ ๊ธฐ์ ํ ๊ฐ์ง๋ก ์ ํํ๊ณ ์ถ์ผ๋ฉด ๋ฐ๋ก ์ค์ ์ด ํ์ํ๋ค. ์๋์์ ํ์ธ ๋ฐ๋.
iOS14
์ฑ์ด ์คํ๋๋ ๋์ค, ์ ํ๊ฐ ํ์ ํํ๋ก ์จ๋ค๊ณ ํด์ Inactive ์ํ๊ฐ ๋๋ ๊ฒ์ ์๋๋ค. ์ ํ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ์ ๋ Inactive ์ํ๊ฐ ๋๋ค. ์์คํ ์ ์ํด ๊ตฌํ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ ์ Active ์ํ๋ก ๋ณด์ง ์๋๋ค.
pip ๋ชจ๋๋ก ๋ ์๋๋ผ๋ ํ์ฌ active ์ํ๋ก ๋์์ง ์ฑ์ ์ํ๊ฐ ์ ์ง๋๋ค.
pip ๋ชจ๋๋ ์ฐฝ ๋ชจ๋๋ฅผ ์๋ฏธํ๋ค. ์ ํ๋ธ์์ ์ฐฝ ๋ชจ๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก๋ค.
available attribute keyword (์ฝ๋์ ๋ฒ์ ๋์์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?)
@available(iOS 13.0, *) // 13.0 ๋ฒ์ ์ด์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Snippet ์์ฑํด์ ์ฌ์ฉํ์ :)
swift5.6๋ถํฐ unavailable keyword๊ฐ ์๊ฒผ๋ค๊ณ ํ๋ค. (์คํธ๋ผ.. ์ฐพ์๋ด์ผ์ง)
๋ ๋ง์ ๋ด์ฉ์ TIL - #available, @available ์ฐธ๊ณ ๋ฐ๋.
Not Running์ธ์ง Background์ธ์ง ๊ทธ ์ํ๊ฐ ๊ถ๊ธํ๋ค.
ํํ๋ฉด์ ๋ฐ์์ ์๋ก ์ฌ๋ฆฌ๋ฉด ์ฌ์ฉํ๋ ์ฑ์ ๋ชฉ๋ก์ ์ญ ๋ณผ ์ ์๋ค.
๋ชจ๋ ์ฑ์ด Background ์ํ์ ์๋ ๊ฒ์ ์๋๋ค. ์ค์ ๋ก os์ ์ํด ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ๊ฐ ์์์ ์งํ๋๋ค. ๊ทธ ์ฐจ์ด๋ฅผ ํ์ธํ๊ณ ์ถ๋ค๋ฉด Background ์ํ๋ก ์ฑ์ ์ค๋ ์ผ๋๊ณ ํ๋์ฉ ํ์ธํด๋ณด์. ์ด๋ค ์ฑ์ Launchscreen๋ถํฐ ์์๋๋ ์ฑ์ด ์๊ณ , ์ด๋ค ์ฑ์ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉํ ํ๋ฉด์ด ๋์ฌ ๊ฒ์ด๋ค. ์ ์๋ Not Running ์ํ๊ฐ ๋์ด๋ฒ๋ฆฐ ๊ฒ์ด๊ณ , ํ์๋ Background ์ํ์ธ ๊ฒ์ด๋ค.
๋๋ฐ์ด์ค ์ฑ๋ฅ, ์ฉ๋, ๋ฐฐํฐ๋ฆฌ, ์ ์ ๋ ฅ ๋ชจ๋ ๋ฑ์ ๋ฐ๋ผ์๋ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ ์ํฉ์ด ๋ฌ๋ผ์ง๋ค.
๋คํฌ๋ชจ๋์ ์ปฌ๋ฌ ์ง์
๋คํฌ๋ชจ๋ on/off์ ๋ฐ๋ผ์ Label์ ์์์ด ๋ณ๊ฒฝ๋๊ณ ์๋ค.
Black Color vs Label Color
๋ ๋ค ๊ฒ์์์ธ ๊ฒ ๊ฐ์๋ฐ ๋ฌด์จ ์ฐจ์ด๊ฐ ์์ง?
๋คํฌ๋ชจ๋๋ฅผ ์ ์ฉ์์ผ๋ณด์.
Black์ฒ๋ผ ์์์ ์ด๋ฆ์ด ์ ํํ๊ฒ ๋ช ์๋ ๊ฒ์ ์ด๋ค ๋ชจ๋์์๋ ์ง ์์์ด ์ ์ง๋๋ค. (ํ ๊ฐ์ง ์์์ผ๋ก ์ ์ง๋จ!)
System Color(+ ์๋์ ์ผ๋ก ๋ค์ด๋ฐ์ด ๋ค์ด๊ฐ ์์)
iOS13๋ถํฐ ๋ฑ์ฅํ์๋ค. ๋คํฌ๋ชจ๋ ๋์์ ์ํด ๋ ๊ฐ์ง ์ปฌ๋ฌ๋ฅผ ์ง๋๊ณ ์๋ค.
์ปค์คํ ์ปฌ๋ฌ
์ฌ์ฉ์๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ์ํ ์ปค์คํ ์ปฌ๋ฌ๋ ๋ฐ์ (๋คํฌ ๋ชจ๋์ ๋ฐ๋ผ ์์ ๋ฐ์ )๋์ง ์๋๋ค.
๊ฑฑ์ ๋ง๋ผ, Asset Catalog๋ฅผ ์ด์ฉํด์ ๋คํฌ๋ชจ๋์ ๋์ํ ์ ์๋ ์์์ ๋ง๋ค ์ ์๋ค.
Asset Catalog๋ก ๋คํฌ๋ชจ๋ ์ ์ฉํ๊ธฐ
- Any, Dark (iOS 13.0 ์ด์์ด๋ผ๋ฉด ์๊ด์๋ค.)
- Any, Light, Dark (๋ง์ฝ ๊ทธ ์ดํ์ ๋ฒ์ ๊น์ง ์ปจํธ๋กคํ๊ณ ์ถ๋ค๋ฉด ์ฌ์ฉํ์.)
- Accent Color
๋ง์ฝ์ ๋คํฌ๋ชจ๋๋ฅผ ๋์ํ๊ณ ์ถ์ง ์๋ค๋ฉด!
์ค์ ์ฑ ์ฌ๋ก
- ์ ํ๋ธ, ์ธ์คํ๊ทธ๋จ : ๋คํฌ๋ชจ๋ ๋์
- ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ : ๋คํฌ๋ชจ๋ ์ ํ
๋คํฌ ๋ชจ๋ ์ ํ ๋ฐฉ๋ฒ
๋ช ์์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ฒ ๋ค๊ณ ์ค์ ํ์. Info.plist์์ ์ง์ ํ ์ ์์.
Info.plist๋ source code๋ก๋ ๋ณผ ์ ์์ผ๋ ์ทจํฅ๊ป ์์ ํ์.
value ๊ฐ์ ์๋ฌธ์๋ก ์ฐ๋ฉด ๋ฆฌ์ ์ฌ์ ๊ฐ ๋ ์ ์๋ค ใ
ใ
UIUserInterfaceStyle๊ณผ Appearance(์ต๊ทผ)๋ ๊ฐ์ ์ฉ์ด์ด๋ค. ๋ฒ์ ์ ๋ฐ์ดํธ ๋๋ฉด์ ์ด๋ฆ์ด ๋ฐ๋ ๊ฒ์ด๋ ์ฐธ๊ณ !
๊ฐ์ธ ์ฑ์ด๋ ํฌ๊ฒ UI๊ฐ ์ค์ํ ํ๋ก์ ํธ๊ฐ ์๋๋ผ๋ฉด ๋์์ ํ์ง ์๋ ๊ฒ์ด ๋ฆฌ์์ค๊ฐ ์กฐ๊ธ์ ๋ ๋๋ ๋ฐฉ๋ฒ์ผ ๊ฒ ๊ฐ๋ค. ๋คํฌ๋ชจ๋๋ง ์ฐ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์๋ค. ํ ๊ฐ์ง ์์๋ง ์ฐ๋ ๋ฐฉ์์ผ๋ก ๋์ผํ๊ฒ ํด์ฃผ๋ฉด ๋๋ค. (Light ๋ผ๊ณ ์ค์ ํ๋ฉด ๋จ)
Apple Design Resources
https://developer.apple.com/design/resources/
๋คํฌ๋ชจ๋, ๋ผ์ดํธ๋ชจ๋ ์ปฌ๋ฌ ์ ์ด ๋์์ธ ๋์ด ์๋ ๊ฒ ํฅ๋ฏธ๋กญ๋ค.
๊ทธ ์ธ์ UI Components๋ ํ์ธํ ์ ์๋ค.
๊ฐ๋ก๋ชจ๋
Device Orientation์์ ์ค์ ๋๋ ์ ํ์ด ๊ฐ๋ฅํ๋ค.
๊ธฐ๊ธฐ ์ ์ฅ์์ ๊ฐ๋ก๋ชจ๋๋ฅผ ํ๋จํ๋ ๊ฒ์ ๊ฐ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋จํ๋ค.
- Portrait
์ธ๋ก ๋ชจ๋ - Upside Down
180๋ ์ ํ, ์ด๊ฒ์ iPad์๋ง ์ ์ฉ(์๋ํ๋ฉด ์์ดํฐ์๋ ๋ ธ์น๊ฐ ์๊ธฐ ๋๋ฌธ) - Landscape Left
๊ฐ๋ก๋ชจ๋, ์ผ์ชฝ์ผ๋ก ํ์ - Landscape Right
๊ฐ๋ก๋ชจ๋, ์ค๋ฅธ์ชฝ์ผ๋ก ํ์
TARGETS - Build Settings๊น์ง ๋ฐ๋์ด์์ด์ผ ์ ์ ์ฉ์ด ๋ ๊ฒ์ด๋ค.
General์์ ์ผ๋ถ ์ค์ ์ ์งํํด๋ Build Settings์ ์ ์ฉ์ด ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
Build Settings๋ ๊ฐ๋ฐ์๊ฐ ์์ฃผ ๋ณ๊ฒฝํ๋ ๋ด์ฉ๋ค์ด ๋ด๊ฒจ์๋ค.
Project, Target
๊ธฐ๋ณธ์ ์ผ๋ก Project์์ ์ค์ ํ ๊ฐ์ด Target์ผ๋ก ์์์ด ๋๋ค.
Target์ ์ฌ๋ฌ ๊ฐ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ค์ ์ด ๋ฌ๋ผ์ง ์ ์๋ค.
Widget, Keyboard, ..., Extensions ๋ฑ ์ฌ๋ฌ ๊ฐ์ Target์ด ์๊ธธ ์ ์๋ค.
UIWindow
์ค์ง์ ์ผ๋ก ๋์ ๋ณด์ด๋ ํ๋ฉด์ ์๋๋ค.
๋น์ถฐ์ฃผ๋ ๊ฑฐ์ธ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค. (๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋น์ถฐ์ฃผ๋ ํต๋ก)
์ด๋ค ๋ฒ์ ์ด๋ UIWindow๋ฅผ ์ฌ์ฉํ๋ค.
์์ดํฐ์ ๋จ์ผ ํ๋ฉด์ธ๋ฐ ์ด๋ค ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ณด์ฌ์ค ์ ์์๊น?
UIWindow๊ฐ ๊ทธ๊ฒ์ ๊ด์ฅํ๋ค.
13.0 ์ด์ ๋ฒ์ ์์ ํ๋ฉด์ ๋น์ถฐ์ฃผ๊ธฐ ์ํด์๋ window ํ๋กํผํฐ๋ฅผ AppDelegate์์ ์ ์ธํด์ฃผ์ด์ผ ํ๋ค.
์ App Delegate์์ window ํ๋กํผํฐ๋ฅผ ์ ์ธํด์ค์ผ ํ๋์? ์ ๊ทธ๋ฌ๋ฉด ๊น๋งฃ๊ฒ ํ๋ฉด์ด ๋์จ๋ค.
iOS13์ด์ ์๋ Scene Delegate ๊ฐ๋ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
sleep() ๋ฉ์๋๋ฅผ ์ด์ฉํด Launch Screen ๋์ ์๊ฐ ์กฐ์
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
sleep(2)
return true
}
}
time sleeping์ ํตํด์ ๋ฐ์น ์คํฌ๋ฆฐ์ ๋ก๋ฉ ์๊ฐ์ ์กฐ์ ํ ์๋ ์์ผ๋ ๊ทธ๋ ๊ฒ ๊ถ์ฅํ์ง๋ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
AppDelegate์์ Window ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ฉด iOS 12 ~ 15 ๋ชจ๋ ๋์ ๊ฐ๋ฅ
IBOutlet์ด ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ์ด ์ ๋์ง ์์๋
- ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ญ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ
- Clean Build ์คํํ๊ธฐ (cmd+shift+k)
UITextField
text ํ๋กํฐํผ์ placeholder ํ๋กํผํฐ๋ ๋ค๋ฅด๋ค. (์์ญ ๊ตฌ๋ถ)
UIButton
Button์ State๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค. ๊ทธ ์ค์์ normal, highlighted๋ฅผ ๋จผ์ ์ดํด๋ณด์
- .normal (๋ฒํผ์ ๊ธฐ๋ณธ ์ํ)
- .highlighted (๋ฒํผ์ ๋๋ ์ ๋)
Button์ IBAction์ ์ฐ๊ฒฐํ ๋๋ sender์ ํ์ ์ Any๊ฐ ์๋ UIButton์ผ๋ก ์ง์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ์ ์ผ๊น?
Keyboard๊ฐ ์ ์์ ์ผ๋ก ์ฌ๋ผ์ค์ง ์์ ๋
๋ฌผ๋ฆฌ์ (ํ๋์จ์ด) ํค๋ณด๋๊ฐ ์ฐ๊ฒฐ ํด์ - ๊ทธ๋ผ ์๋์ผ๋ก ํ ์คํธ ํ๋์ ๊ฐ์ ์ ๋ ฅํ๋ ค๊ณ ํ ๋ ์ํํธ์จ์ด ํค๋ณด๋๊ฐ ์ฌ๋ผ์จ๋ค.
์ํํธ์จ์ด ํค๋ณด๋ ์ง์ ์ฌ๋ฆฌ๋ ๋ฒ (cmd+k)
IBOutlet๊ณผ IBAction
๋ ๋ค ์ธํฐํ์ด์ค ๋น๋ ์์
- Outlet: UI ๊ด๋ จ๋ ๋ก์ง
- Action: ๊ธฐ๋ฅ ๊ด๋ จ๋ ๋ก์ง
ํค๋ณด๋ ๋ด๋ฆฌ๊ธฐ์ Tap Gesture
- ๊ฐ์ฅ ์๋ก ์ ์ธ ๋ฐฉ๋ฒ
๋ฒํผ์ ๋ฐํ ํฌ๊ธฐ ๋งํผ ์ฑ์ด๋ค. ๋ฒํผ์ ๋๋ ์ ๋ ์ก์ ์ ๋๊ฒ ์ง๋ง ๊ฒน์น๋ ์์ญ์ ๋ํ ๋์์ด ๋์ง ์๋๋ค. ์ฆ ํ ์คํธ ํ๋๋, ๋ค๋ฅธ ๋ฒํผ์ ๋ํ ๋์์ ์ํํ ์ ์๋ค. - ์ ์ค์ฒ(tap gesture)์ ์ด์ฉ
@IBAction func tapGestureDidTapped(_ sender: Any) { view.endEditing(true) // ๋ชจ๋ ํธ์ง์ด ๋๋ฌ๋ค. }
- view์ ๋ชจ๋ ํธ์ง์ ์ข ๋ฃํ๋ค.
- Gesture์ ๊ฒฝ์ฐ Layer์ ์๊ด์๋ค. Control ์์ญ์ ์ ์ธํ๊ณ ๋ชจ๋ ๋์ํ๊ฒ ๋๋ค.
- view.endEditing(:_) ๋ฉ์๋๋ ๋ณธ์ง์ ์ผ๋ก ํค๋ณด๋๋ฅผ ๋ด๋ฆฌ๋ ์ฝ๋๋ ์๋๋ค.
์ค๋ธ์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ tap gesture๋ฅผ ์ฌ๋ฆฌ๋ฉด ๊ทธ๋ฅ Superview์ ์ฌ๋ผ๊ฐ๋ ๊ฑธ๊น?
์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฐ๋ก ์ฌ๋ ธ๋๋ฐ ๋์์ด ์ค์ฒฉ๋๋ ๊ฒ ๊ฐ์์ ํ์ธํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
'๐ฑ SeSAC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SeSAC] 220713 TIL (0) | 2022.07.21 |
---|---|
[SeSAC] 220712 TIL (0) | 2022.07.13 |
[SeSAC] 220711 TIL (0) | 2022.07.11 |
[SeSAC] 220708 TIL (0) | 2022.07.08 |
[SeSAC] 220707 TIL (0) | 2022.07.07 |