ScenePhase?
앱을 만들다보면 앱이 잠깐 백그라운드로 갔을때나 백그라운드에서 다시 돌아왔을때, 시점이 필요할때가 있다. 나같은 경우는 잠깐 앱을 background 상태로 두고 권한을 변경한다면? 이 것을 UI 에 바로 적용시킬 수 없을까? 하는 궁금증에서 찾아보았는데 방법이 있었다! 바로 ScenePhase 를 활용하면 된다.
공식문서에 정말 친절하게 사용설명이 되어있다.
ScenePhase 사용해보기
사용방법은 아주 간단하다. 아래와 같이 @Environment 로 변수를 선언해주고, scenePhase 로 앱의 상태를 판별할 수 있다.
@Environment(\.scenePhase) private var scenePhase
// switch case 도 가능하고 if 로 처리 해줘도 된다.
// 모든 상태를 보여드리기 위해 switch case 를 사용했습니다.
.onChange(of: scenePhase) { _, phase in
switch phase {
case .background:
print("background")
case .inactive:
print("inactive")
case .active:
print("active")
@unknown default:
print("unknown default")
}
}
위와 같이 뷰에 위의 코드를 넣어준다면...
처음 뷰가 나왔을때 active, 앱을 올려버리면(?) inactive 가 되면서 background 가 되는 모습을 볼 수 있다. 또한 다시 앱을 키면 inactive, active 가 차례로 나오는 것을 볼 수 있다.
슬로우 모션
inactive 가 어떤 조건에서 나타나는 건지 궁금해서 slow motion 으로 빌드를 해보았는데, 아래와 같이 앱이 커지거나 작아지고 있는 순간에는 inactive 가 되고 이것이 완료 되었을때 background, active 가 나타나는데 background 의 경우 active 가 나타나는 타이밍보단 살짝 빠르다.
결론
ScenePhase 를 통해 간단하게 앱의 background, inactive, active 상태를 받아올 수 있다! 여기서 주의 할 것은 inactive 상태란 앱이 꺼진 상태가 아닌 앱이 사라지거나 나타나지고 있는 상태를 나타낸다!
'→ Swift Archive' 카테고리의 다른 글
[SwiftUI] TabView 이상한 현상 발견?! (0) | 2024.02.03 |
---|---|
[SwiftUI] 앱의 실행, 종료 알기 (1) | 2024.01.27 |
[SwiftUI] 네트워크 연결 확인하기 (0) | 2024.01.23 |
[SwiftUI] 커스텀 글래스모피즘 구현하기 (0) | 2024.01.10 |
[SwiftUI] PolygonChart 만들기 (1) | 2023.12.15 |