SwiftUI에서 Combine을 활용해서 화면 회전 감지하기
·
iOS/SwiftUI
PoC를 진행하며, iPad에서 가로 및 세로 모드를 모두 지원해야 했고, 이를 위해 디바이스의 방향을 감지하는 기능이 필요했습니다. Combine과 NotificationCenter를 활용하여 회전을 감지하고 화면에 반영하는 방법을 사용했습니다. 목표SwiftUI에서 화면 방향을 일관되게 감지하고 관리할 수 있도록 DeviceManager라는 싱글톤 클래스를 구현합니다. DeviceManager는 앱 전역에서 기기의 화면 회전을 감지하고, 이를 SwiftUI 뷰에서 구독하여 UI를 업데이트할 수 있도록 합니다.1. DeviceManager 싱글톤 클래스 만들기DeviceManager는 화면 회전 상태를 관리하는 @Published 변수를 포함한 싱글톤 객체로, 방향이 바뀔 때마다 UIDevice.cur..
SwiftUI에서 각 탭마다 독립적인 네비게이션 스택 유지하기
·
iOS/SwiftUI
SwiftUI의 TabView는 손쉽게 탭 구조를 만들 수 있게 해주지만, 기본적으로 각 탭의 네비게이션 스택을 독립적으로 유지하지 않습니다. 예를 들어, 첫 번째 탭에서 여러 화면을 이동한 뒤 다른 탭으로 전환했다가 돌아오면 네비게이션 스택이 초기화됩니다. 이 글에서는 UIKit의 UINavigationController를 활용하여 각 탭마다 독립적인 네비게이션 스택을 유지하는 방법을 소개합니다. 이를 통해 사용자가 각 탭에서 스택 상태를 유지하며 화면을 이동할 수 있도록 합니다. 프로젝트 구성MVVM 패턴을 사용하여 프로젝트를 다음과 같이 구성했습니다.YourProject├── Managers│ └── NavigationManager.swift // 각 탭의 UINavigatio..
SwiftUI에서 UIKit의 `UINavigationController`로 화면 전환 구현하기
·
iOS/SwiftUI
SwiftUI는 매우 직관적이고 선언적인 UI 구성 방식을 제공하지만, iOS 14 기준으로 제공되는 네비게이션 도구에는 아직 제약이 있어 화면 전환을 보다 유연하게 제어하는 데 어려움을 겪을 수 있습니다. 특히, 복잡한 네비게이션 구조를 필요로 하거나 UIKit에서 제공하는 네비게이션 기능을 활용하고 싶을 때 SwiftUI의 NavigationView와 NavigationLink는 부족한 면이 있습니다. SwiftUI를 통해 프로젝트를 진행하던 중 화면 전환의 어려움을 겪었고, 결국 UIKit의 UINavigationController를 활용해 SwiftUI와 UIKit 네비게이션을 조합하여 구현하는 방식을 도입하게 되었습니다. 이 글에서는 UINavigationController를 SwiftUI에서 ..
SwiftUI에서 RestAPI를 통해 서버의 데이터를 화면에 보여주기
·
iOS/SwiftUI
SwiftUI 앱을 개발하다 보면, RestAPI를 통해 서버에서 데이터를 불러와 화면에 표시해야 할 때가 많습니다. 특히 SwiftUI에서 데이터를 언제, 어떻게 로드할지는 앱의 성능과 사용자 경험에 중요한 영향을 미칩니다. 이 글에서는 MVVM 패턴을 기반으로 **.task {}, .onAppear {}, ViewModel init**의 각각의 데이터 로드 방식을 비교하고, 상황별로 어떤 방법이 더 적합할지 살펴보겠습니다.SwiftUI와 MVVM 패턴 간단히 알아보기 SwiftUI는 MVVM 패턴을 사용하기에 최적화된 프레임워크입니다. MVVM 패턴을 사용하면 UI와 비즈니스 로직을 깔끔하게 분리할 수 있어, 유지보수성이 높아지고 코드가 더욱 직관적이 됩니다. 예제에서 사용할 MVVM 패턴의 구조를 ..