티스토리 뷰

반응형

 

 

 


SwiftUI의 Scene

SwiftUI의 요소 중 하나인 Scene은 시스템에 의해 관리되는 생애주기 사이클을 가진 앱 유저 인터페이스의 일부분입니다.

 

 


Declaration
선언방법


Scene은 프로토콜로 선언되어있습니다. 이어서 바로 SwiftUI에서 사용되는 Scene의 개요를 알아보겠습니다. 

 

 


Overview
개요

개발자는 앱의 body에 Scene 프로토콜을 준수하는 1개 이상의 인스턴스들을 결합해서 App을 만들 수 있습니다. 개발자는 SwiftUI에서 제공하는 원시적인 Scene을 사용할 수 있는데요. 그 예시로는 또 다른 Scene들로부터 구성할 수 있는 커스텀 Scene들과 함께하는 WindowGroup이 있습니다.

커스텀 Scene을 만들기 위해서는, Scene 프로토콜을 채택하는 타입을 선언해야합니다.
계산 프로퍼티로서의 body를 선언 및 구현하고, 커스텀 Scene을 위한 컨텐츠들을 제공할 수 있습니다. 

 

Scene을 채택한 MyScene 구조체 내부테 body라는 계산 프로퍼티를 선언하고 있습니다. 


Scene은 개발자가 유저에게 보여주고싶은 뷰 계층을 설계하기 위한 컨테이너로서 동작합니다. 시스템은 현재 앱 상태에 맞게 언제, 어떻게 현재 플랫폼에 적당한, 동작을 수행하고, 유저 인터페이스 상의 뷰계층을 표현할지를 결정하게 됩니다. 그 예를 들자면, 위에서 보여진 WindowGroup을 위해서 시스템은 유저가 macOS, iPadOS 등의 플랫폼 상에서 MyRootView를 포함한 윈도우들을 생성 혹은 삭제하는것을 지원합니다.

SwiftUI를 사용하면, 서로 다른 플랫폼 상에서 같은 active한 뷰 계층이 전체적인 디스플레이를 사용할 수 있습니다.

Scene이 active상태 혹은, 그 외의 상태인지를 판단하기 위해 Scene이나 View들 중의 하나에서 scenePhase라는 환경 값을 참고할 수 있습니다. 개발자는 scehePhase를 포함한 프로퍼티를 생성할 수 있는데요. 이는 열거형 타입인 ScenePhase의 값들 중 하나입니다. ScenePhase 값은 @Environment를 사용해서 생성할 수 있습니다. 그 생성 방법은 아래와 같습니다. 

 


Scene 프로토콜은 프로토콜 메서드로 정의된 기본 구현제로서, Scene 변형자를 제공합니다. 개발자는 해당 Scene 변형자로 Scene을 설정할 수 있게 됩니다. 그 예시로, 개발자는 onChange(of:perform:) 변형자 메서드를 사용할 수 있습니다. 해당 메서드는 값이 변경되었을 때, 해당 액션의 트리거 역할을 담당합니다. 

아래의 코드는 Window Group 내의 모든 Scene들이 백그라운드로 이동할때, 모든 캐시를 비우는 동작을 실행하는 코드입니다. 

 


위의 코드를 보면, body Scene의 WindowGroup scenePhase 상태값이 변경되었을 때의 동작을 .onChange(of:)을 통해 수행하고 있습니다. 해당 클로져 내의 인자는 newScenePhase이며, 위에서 보았듯이 열거형 타입으로서 다양한 상태 값을 가지고 있습니다.

.onChange(of:) 메서드 내에서 newScenePhase가 .background 상태일 경우, 캐시를 비우는 동작을 하고 있는 것을 볼 수 있습니다. 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함