1. ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฑ์ ์ ์ฉํด๋ณด๊ณ ์ถ์ iOS์ ์ฌ๋ฌ ๊ธฐ๋ฅ~์ ๋ง๋๋ก ์ถ๊ฐํ ์ ์๋ค๋ ์ ์ด ์์ฌ์ ๋ค. (ํํ๋ก์ ํธ๋๊น..)
2. ํผ์ ์ฑ์ ๋ง๋ค๋ฉด์ ๊ฐ๋ฐํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ๋ง๊ป ์๋ํด๋ณด์~
3. ๊ธฐํ&๋์์ธ์ ์๊ฐ์ ์๊ฐ๋ณด๋ค ์ฐ๊ฒ๋๋ค.
4. ๊ธฐ๋ฅ/ํ๋ฉด ๋จ์๋ก ๊ตฌํํด๋ณด์ ! (์ธ์ ๊ฐ ๋์์ด ๋๊ฒ ์ง !)
์ด์ฐ์ ์ฐ ์๊ฐ์ ๋ณด๋ด๋ค๋ณด๋ ํ์ฌ 4๋ฒ์ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค.
๊ทธ๋ฌ๋ค ๋ฌธ๋ ์คํ๋ฒ ์ค ์ฑ์ ์ฌ์ฉํ๋ฉด์ ์ ๋~ํ ์ฑ์ Inactive ์ํ๋ก ๋ง๋ค๋ฉด Active์ ์ํ์ ํ๋ฉด์ด ์๋ ์ด๋ก ๋ฐฐ๊ฒฝ์ ์คํ๋ฒ ์ค ๋ก๊ณ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฑธ ๋ฐ๊ฒฌํ๋ค.
์ด๋ฐ ๊ธฐ๋ฅ(?)์ ๋ณดํต ์ํ ์ฑ์์ ์์ฃผ ๋ณด์ด๋ ํจํด์ธ๋ฐ ์คํ๋ฒ ์ค์์ ๋ณด์ฌ์ ๋ ํนํ๋จ ์๊ฐ์ ํ๋ค.
๊ตฌํ์ ํด๋ณด์
ScenePhase์๋ .active, inactive, background 3๊ฐ์ง์ ์ํ๊ฐ ์๋ค. ์ด ์ํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๋ฉด ๋๋ค!!
์ด ์ํ ๊ฐ๋ ์ ๋ํด ๊ธธ๊ฒ ์์ฑํ ์,,๋ ์์ง๋ง, ์ด ๊ธ์์๋ .inactive ์ํ์์ ๋ค๋ฅธ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๋ก ๊ตฌํํ๋๋ฐ ์ง์คํ ๊ฒ์ด๋ค.

๋จผ์ ํ๊ฒฝ๋ณ์ scenePhase๋ฅผ ์ ์ธํด์ค๋ค.
์ ์ธํ๊ณ ๋ณด๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ฐ์์ ์ฝ๋ ์คํ์ผ์ ๋ฐ๋ผ, ํ๋ก์ ํธ์ ๊ท๋ชจ์ ๋ฐ๋ผ ์ ํฉํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ทฐ์ ๋ฐ๋ก ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด์ ๋ถ๊ธฐ ์ฒ๋ฆฌํด๋ ๋๊ณ , .inactive ์ํ์ผ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ทฐ๋ฅผ ์ค๋ฒ๋ ์ด ํด๋ ๋ ๊ฒ ๊ฐ๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋์ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๋ก ๊ตฌ๋ถํด์ ์์ฑํด๋ณด์๋ค.
์ฝ๋๋ฅผ ๋ณด์ !
1) Scene์์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ ๋ณด์ฌ์ฃผ๊ธฐ
์กํฐ๋ธ๊ฐ ์๋ ๊ฒฝ์ฐ (== .inactive, .background) ํ๋์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
@main
struct SwiftUIStudyApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
if scenePhase == .active {
MainView()
} else {
Color.blue.ignoresSafeArea()
}
}
}
}
2) Scene์์ ์ค๋ฒ๋ ์ด๋ก ๋ค๋ฅธ ๋ทฐ ๋ณด์ฌ์ฃผ๊ธฐ
inactive์ผ ๊ฒฝ์ฐ ํ๋์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
@main
struct SwiftUIStudyApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
MainView()
.overlay {
if scenePhase == .inactive {
Color.blue.ignoresSafeArea()
}
}
}
}
}
3) View์์ ์ค๋ฒ๋ ์ด๋ก ๋ค๋ฅธ ๋ทฐ ๋ณด์ฌ์ฃผ๊ธฐ
inactive์ผ ๊ฒฝ์ฐ ํ๋์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
struct MainView: View {
@Environment(\.scenePhase) var scenePhase
@State var selection: Int = 0
var body: some View {
TabView(selection: $selection) {
FirstView()
.tabItem {
Label("Radin", systemImage: "house.fill")
}
SecondView()
.tabItem {
Label("Jini", systemImage: "pencil")
}
}
.overlay {
if scenePhase == .inactive {
Color.blue.ignoresSafeArea()
}
}
}
}
๊ตฌํ ๊ฒฐ๊ณผ
Inactive์ํ์ธ ๊ฒฝ์ฐ(App Switcherํ๋ฉด)์ธ ๊ฒฝ์ฐ ์๋์ฒ๋ผ ํ๋ฉด์ ๊ฐ๋ ค์ค ์ ์๋ค.


+ ๋ค๋ฅธ ์ฌ๋ก ์์๋ณด๊ธฐ
1. UI๋ฅผ ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๋ ์ฑ

2. ๋ง์คํน์ผ๋ก ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๋ ์ฑ
์๊ณ ๋ ๊ฐ๋ ค์ค์...

3. ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๋ ์ฑ
์ํ/์นด๋/ํ์ด ์ฑ์ ์๊ฒ ๋๋ฐ ์คํ๋ฒ ์ค๋ ์ ์ด๋ฐ ์ฒ๋ฆฌ๋ฅผ ํ์๊น.. ์๋๊ฐ ๋ญ๊น???

4. ๋ฐฑ๊ทธ๋ผ์ด๋์ผ ๊ฒฝ์ฐ ๋ธ๋ฌ์ฒ๋ฆฌํ๋ ์ฑ

์นด์นด์ค๋ฑ ํฌ๋ ๋ณ๋ค๋ฅธ ์ฒ๋ฆฌ๊ฐ ์์ด์ 1๋ฒ์ผ๋ก ๋ถ๋ฅํ๋ ค ํ๋๋ฐ ๋ค๋ฅธ ์ฑ์ ํ์ธํ๋ ค๊ณ ๋ณด๋๊น ๋ ๋ฌ๋๋ค.
๋ค๋ฅธ ์ฑ๋ค๊ณผ ๋ฌ๋ฆฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ผ ๊ฒฝ์ฐ ๋ธ๋ฌ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ ๊ฐ๋ค.
๋ก๊ณ ์ ์์์ผ๋ก ์ฑ์ ๊ฐ์กฐ(?)ํ๋๊ฒ ์๋๋ผ ๋ธ๋ฌ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ด์ ๋ ๋ฉ๊น!!!!?!
.inactive์ด๋ฉด ๋ก๊ณ ์ ํ๋์ ๋ฐฐ๊ฒฝ, .background๋ฉด ๋ณด๋ผ์ ๋ฐฐ๊ฒฝ์ด๋๋ก ๋ค์ ์์ ํด๋ดค๋ค.


๋ - !
'๐ Apple > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] RedactionReasons ๋ ์์๋ณด๊ธฐ(privacy, invalidated) (0) | 2025.01.06 |
---|---|
[SwiftUI] redacted๋ฅผ ์ฌ์ฉํ ์ค์ผ๋ ํค ํ๋ฉด ๊ตฌํํ๊ธฐ (0) | 2025.01.06 |
[SwiftUI] String์ ํฌํจ๋ HTML ํ๊ทธ ์ญ์ (0) | 2023.11.15 |
[SwiftUI] @Environment (0) | 2023.04.23 |
[SwiftUI] ViewBuilder๋? (1) | 2023.04.23 |
1. ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฑ์ ์ ์ฉํด๋ณด๊ณ ์ถ์ iOS์ ์ฌ๋ฌ ๊ธฐ๋ฅ~์ ๋ง๋๋ก ์ถ๊ฐํ ์ ์๋ค๋ ์ ์ด ์์ฌ์ ๋ค. (ํํ๋ก์ ํธ๋๊น..)
2. ํผ์ ์ฑ์ ๋ง๋ค๋ฉด์ ๊ฐ๋ฐํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ๋ง๊ป ์๋ํด๋ณด์~
3. ๊ธฐํ&๋์์ธ์ ์๊ฐ์ ์๊ฐ๋ณด๋ค ์ฐ๊ฒ๋๋ค.
4. ๊ธฐ๋ฅ/ํ๋ฉด ๋จ์๋ก ๊ตฌํํด๋ณด์ ! (์ธ์ ๊ฐ ๋์์ด ๋๊ฒ ์ง !)
์ด์ฐ์ ์ฐ ์๊ฐ์ ๋ณด๋ด๋ค๋ณด๋ ํ์ฌ 4๋ฒ์ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค.
๊ทธ๋ฌ๋ค ๋ฌธ๋ ์คํ๋ฒ ์ค ์ฑ์ ์ฌ์ฉํ๋ฉด์ ์ ๋~ํ ์ฑ์ Inactive ์ํ๋ก ๋ง๋ค๋ฉด Active์ ์ํ์ ํ๋ฉด์ด ์๋ ์ด๋ก ๋ฐฐ๊ฒฝ์ ์คํ๋ฒ ์ค ๋ก๊ณ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฑธ ๋ฐ๊ฒฌํ๋ค.
์ด๋ฐ ๊ธฐ๋ฅ(?)์ ๋ณดํต ์ํ ์ฑ์์ ์์ฃผ ๋ณด์ด๋ ํจํด์ธ๋ฐ ์คํ๋ฒ ์ค์์ ๋ณด์ฌ์ ๋ ํนํ๋จ ์๊ฐ์ ํ๋ค.
๊ตฌํ์ ํด๋ณด์
ScenePhase์๋ .active, inactive, background 3๊ฐ์ง์ ์ํ๊ฐ ์๋ค. ์ด ์ํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๋ฉด ๋๋ค!!
์ด ์ํ ๊ฐ๋ ์ ๋ํด ๊ธธ๊ฒ ์์ฑํ ์,,๋ ์์ง๋ง, ์ด ๊ธ์์๋ .inactive ์ํ์์ ๋ค๋ฅธ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๋ก ๊ตฌํํ๋๋ฐ ์ง์คํ ๊ฒ์ด๋ค.

๋จผ์ ํ๊ฒฝ๋ณ์ scenePhase๋ฅผ ์ ์ธํด์ค๋ค.
์ ์ธํ๊ณ ๋ณด๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ฐ์์ ์ฝ๋ ์คํ์ผ์ ๋ฐ๋ผ, ํ๋ก์ ํธ์ ๊ท๋ชจ์ ๋ฐ๋ผ ์ ํฉํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ทฐ์ ๋ฐ๋ก ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด์ ๋ถ๊ธฐ ์ฒ๋ฆฌํด๋ ๋๊ณ , .inactive ์ํ์ผ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ทฐ๋ฅผ ์ค๋ฒ๋ ์ด ํด๋ ๋ ๊ฒ ๊ฐ๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋์ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๋ก ๊ตฌ๋ถํด์ ์์ฑํด๋ณด์๋ค.
์ฝ๋๋ฅผ ๋ณด์ !
1) Scene์์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ ๋ณด์ฌ์ฃผ๊ธฐ
์กํฐ๋ธ๊ฐ ์๋ ๊ฒฝ์ฐ (== .inactive, .background) ํ๋์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
@main
struct SwiftUIStudyApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
if scenePhase == .active {
MainView()
} else {
Color.blue.ignoresSafeArea()
}
}
}
}
2) Scene์์ ์ค๋ฒ๋ ์ด๋ก ๋ค๋ฅธ ๋ทฐ ๋ณด์ฌ์ฃผ๊ธฐ
inactive์ผ ๊ฒฝ์ฐ ํ๋์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
@main
struct SwiftUIStudyApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
MainView()
.overlay {
if scenePhase == .inactive {
Color.blue.ignoresSafeArea()
}
}
}
}
}
3) View์์ ์ค๋ฒ๋ ์ด๋ก ๋ค๋ฅธ ๋ทฐ ๋ณด์ฌ์ฃผ๊ธฐ
inactive์ผ ๊ฒฝ์ฐ ํ๋์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
struct MainView: View {
@Environment(\.scenePhase) var scenePhase
@State var selection: Int = 0
var body: some View {
TabView(selection: $selection) {
FirstView()
.tabItem {
Label("Radin", systemImage: "house.fill")
}
SecondView()
.tabItem {
Label("Jini", systemImage: "pencil")
}
}
.overlay {
if scenePhase == .inactive {
Color.blue.ignoresSafeArea()
}
}
}
}
๊ตฌํ ๊ฒฐ๊ณผ
Inactive์ํ์ธ ๊ฒฝ์ฐ(App Switcherํ๋ฉด)์ธ ๊ฒฝ์ฐ ์๋์ฒ๋ผ ํ๋ฉด์ ๊ฐ๋ ค์ค ์ ์๋ค.


+ ๋ค๋ฅธ ์ฌ๋ก ์์๋ณด๊ธฐ
1. UI๋ฅผ ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๋ ์ฑ

2. ๋ง์คํน์ผ๋ก ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๋ ์ฑ
์๊ณ ๋ ๊ฐ๋ ค์ค์...

3. ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๋ ์ฑ
์ํ/์นด๋/ํ์ด ์ฑ์ ์๊ฒ ๋๋ฐ ์คํ๋ฒ ์ค๋ ์ ์ด๋ฐ ์ฒ๋ฆฌ๋ฅผ ํ์๊น.. ์๋๊ฐ ๋ญ๊น???

4. ๋ฐฑ๊ทธ๋ผ์ด๋์ผ ๊ฒฝ์ฐ ๋ธ๋ฌ์ฒ๋ฆฌํ๋ ์ฑ

์นด์นด์ค๋ฑ ํฌ๋ ๋ณ๋ค๋ฅธ ์ฒ๋ฆฌ๊ฐ ์์ด์ 1๋ฒ์ผ๋ก ๋ถ๋ฅํ๋ ค ํ๋๋ฐ ๋ค๋ฅธ ์ฑ์ ํ์ธํ๋ ค๊ณ ๋ณด๋๊น ๋ ๋ฌ๋๋ค.
๋ค๋ฅธ ์ฑ๋ค๊ณผ ๋ฌ๋ฆฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ผ ๊ฒฝ์ฐ ๋ธ๋ฌ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ ๊ฐ๋ค.
๋ก๊ณ ์ ์์์ผ๋ก ์ฑ์ ๊ฐ์กฐ(?)ํ๋๊ฒ ์๋๋ผ ๋ธ๋ฌ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ด์ ๋ ๋ฉ๊น!!!!?!
.inactive์ด๋ฉด ๋ก๊ณ ์ ํ๋์ ๋ฐฐ๊ฒฝ, .background๋ฉด ๋ณด๋ผ์ ๋ฐฐ๊ฒฝ์ด๋๋ก ๋ค์ ์์ ํด๋ดค๋ค.


๋ - !
'๐ Apple > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] RedactionReasons ๋ ์์๋ณด๊ธฐ(privacy, invalidated) (0) | 2025.01.06 |
---|---|
[SwiftUI] redacted๋ฅผ ์ฌ์ฉํ ์ค์ผ๋ ํค ํ๋ฉด ๊ตฌํํ๊ธฐ (0) | 2025.01.06 |
[SwiftUI] String์ ํฌํจ๋ HTML ํ๊ทธ ์ญ์ (0) | 2023.11.15 |
[SwiftUI] @Environment (0) | 2023.04.23 |
[SwiftUI] ViewBuilder๋? (1) | 2023.04.23 |