๐ŸŽ Apple/SwiftUI

[SwiftUI] ์•ฑ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ™”๋ฉด ๋ณด์—ฌ์ฃผ๊ธฐ (App Switcher์—์„œ ์•ฑ ํ™”๋ฉด ๊ฐ€๋ฆฌ๊ธฐ)

JINiOS 2024. 10. 20. 21:01
728x90

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๋ฉด ๋ณด๋ผ์ƒ‰ ๋ฐฐ๊ฒฝ์ด๋„๋ก ๋‹ค์‹œ ์ˆ˜์ •ํ•ด๋ดค๋‹ค.

 

 

 

๋ - !

728x90