[iOS] 이벤트에 응답하기

이 모듈에서 지금까지 배운 것처럼 SwiftUI Property Wrapper를 사용하여 앱의 사용자 인터페이스에서 상태를 관리하고 사용자 상호작용에 응답할 수 있습니다. 하지만 앱 상태의 변화에 따라 어떻게 동작을 수행할 수 있을까요? 이 문서에서는 SwiftUI Scene architecture, 앱 상태, 뷰가 화면에 나타나고 사라지는 등 이벤트에 반응하는 뷰에 대해 다룹니다.
Apr 21, 2024
[iOS] 이벤트에 응답하기

Scene architecture

앱 상태를 살펴보기 전에 SwiftUI가 scene을 구성하는 방법을 살펴보세요. scene은 시스템이 관리하는 수명 주기가 있는 앱 사용자 인터페이스의 일부입니다.

앱을 만들려면 앱 프로토콜을 준수하는 구조를 정의합니다. 정의 앞에 @main 속성을 추가하여 이것이 앱의 유일한 진입점임을 시스템에 알립니다.

Displaying data in a list 에서 Scrumdinger의 root view를 ScrumsView로 설정했을 때 앱의 구조로 작업을 했습니다.

앱 구조의 본문에서 Scene 프로토콜을 준수하는 하나 이상의 Scene을 추가합니다. Scene은 앱이 제공하는 뷰 계층 구조를 위한 컨테이너입니다.

예를 들어, iOS and watchOS에서는 하나의 Scene을 표시하고 macOS and iPadOS에서는 여러 Scene을 표시하도록 앱을 디자인할 수 있습니다.

SwiftUI는 Scrumdinger가 사용하는 WindowGroup과 같은 구체적인 Scene을 제공합니다. 이 시스템은 Scene의 수명 주기를 관리하고 플랫폼과 상황에 적합한 뷰 계층 구조를 표시합니다. 예를 들어 iPadOS의 멀티태스킹은 동일한 앱의 여러 작은 인스턴스를 동시에 표시할 수 있습니다.

Scene phases and transitions

active - scene이 foreground에 표시되며, 사용자가 scene과 상호작용 할 수 있습니다.

inactive - scene이 표시되지만 시스템에서 scene과의 상호작용을 비활성화했습니다. 예를 들어 멀티태스킹 모드에서는 앱의 패널을 다른 패널과 함께 볼 수 있지만 활성 패널이 아닙니다.

background - 앱이 실행 중이지만 scene이 사용자 인터페이스에 표시되지 않습니다. 앱이 종료되기 전에 이 단계에 들어갑니다.

scenePhase 환경 값을 사용하여 scene의 현재 상태를 읽을 수 있습니다. 때로는 scene이 다른 단계로 전환될 때 앱에서 일련의 작업을 수행하기를 원할 수 있습니다.

Persistence and Concurrency 챕터에서는 Scrumdinger에서 onChange(of:perform:) 수정자를 사용하여 여러 실행에 걸쳐 앱 상태를 저장하는 방법을 설명합니다. 이 수정자(modifier)를 사용하여 장면 단계가 비활성화(inactive)될 때 앱 데이터를 저장하는 작업을 트리거할 수 있습니다.

To learn more about scenes and scene phases, watch App essentials in SwiftUI.

Events and state

프로그램 상태의 변화에 따라 뷰를 변경해야 하는 명령형 패턴에 익숙할 것입니다. SwiftUI는 선언적 프로그래밍 패턴을 따릅니다.

SwiftUI 뷰 본문에서는 모든 상태에 대해 사용자 인터페이스가 어떻게 표시되는지 설명합니다. 실행하는 동안 시스템은 상태가 변경될 때마다 사용자 인터페이스의 관련 부분을 업데이트하여 상태와 사용자 인터페이스를 동기화 합니다.

아래 다이어그램은 사용자가 시작한 이벤트 또는 앱 상태 변경에 대해 SwiftUI가 응답하는 방식을 나타냅니다.

사용자 상호작용이나 알림과 같은 이벤트가 발생하면 앱이 응답하게 됩니다. 이벤트에 대한 응답으로 클로저가 실행되며, 이로 인해 소스에 변이가 발생할 수 있습니다. 변이를 관찰한 후 SwiftUI가 뷰를 업데이트하고 사용자 인터페이스를 렌더링합니다.

SwiftUI에는 뷰 수명 주기(view life cycle) 이벤트에 응답하는 세 가지 수정자가 포함되어 있습니다.

onAppear(perform:)는 처음이 아니더라도 뷰가 화면에 표시될 때마다 동작을 트리거합니다.

onDisappear(perform:)는 뷰가 화면에서 사라질 때 동작을 트리거합니다.

task(priority:_:)는 뷰가 화면에 나타나기 전에 비동기적으로 실행되는 작업을 트리거합니다.

이러한 수정자를 사용하여 뷰가 나타나거나 사라질 때 앱의 상태를 변경하는 작업을 수행합니다. 사용자가 시작한 이벤트에서와 마찬가지로 SwiftUI가 뷰 계층 구조를 관리하고 업데이트된 상태를 반영하도록 사용자 인터페이스를 업데이트하여 상태 변경에 대응합니다.

To learn more about the life cycle of SwiftUI views, watch Demystify SwiftUI.

다음 튜토리얼에서는 이러한 방법을 구현하여 스크럼 타이머 시작 및 중지, 발표자의 시간 종료 시점을 알려주는 시청각 플레이어 관리, 음성 인식기 제어, 스크럼 기록 추가에 대해 알아봅니다.

본 포스팅은 Responding to events 문서를 번역하였습니다.

Share article

More articles

See more posts

code-with-me