[SwiftUI] Observation 알아보기
·
Apple/SwiftUI
Observation이 뭘까?Observation은 프로퍼티의 변화를 추적하는 Swift의 새로운 기능입니다. 보통 데이터 모델 타입을 작성할 때는 여러가지 프로퍼티가 들어갑니다.class FoodTruckModel { var orders: [Order] = [] var donuts = Donut.all} 여기에 @Observable을 추가하기만 해도 UI가 데이터 모델의 변화에 대응할 수 있게 됩니다.@Observable class FoodTruckModel { var orders: [Order] = [] var donuts = Donut.all} @Observable은 Swift 컴파일러에게 명령을 내려서 우리가 작성한 코드를 확장형 observable 타입으로 바..
[SwiftUI] ViewBuilder 알아보기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 ViewBuilder에 대해서 정리를 해보려고 합니다.ViewBuilder란?Apple의 공식 문서 설명에는 "Closure로부터 View를 구성하는 사용자 지정 매개변수 속성"이라고 합니다.A custom parameter attribute that constructs views from closures. https://developer.apple.com/documentation/swiftui/viewbuilder ViewBuilder | Apple Developer DocumentationA custom parameter attribute that constructs views from closures.developer.apple.com 일반적으로 '..
[SwiftUI] NavigationLink & NavigationStack
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 SwiftUI로 앱을 개발하다 보면 화면 전환(Navigation)을 구현해야 하는 순간이 반드시 있습니다. 이때 가장 많이 접하게 되는 2가지 개념이 NavigationLink와 NavigationStack입니다. 둘 다 화면 전환을 할 때 쓰이는 것까지는 알겠는데, 정확히 뭐가 어떻게 다르고 언제 뭘 써야 하는지 헷갈리기도 하고 이번 기회에 확실하게 알고 넘어가기 위해서 글을 정리하게 됐습니다. NavigationLink: 화면 전환 트리거NavigationLink는 네비게이션 프레젠테이션을 제어하는 뷰입니다. 쉽게 말해서 그냥 사용자가 탭하면 다음화면으로 이동하게 하는 버튼입니다. 애플 공식 문서에 적혀있는 내용을 보면 아래처럼 나와 있습니다."People clic..
[SwiftUI] 앱에 Face ID 잠금 기능 적용하기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 제가 공부용으로 진행하고 있는 일기앱 프로젝트에서 Face ID 잠금 기능을 도입해봤는데 도입 과정을 정리해보려고 합니다. 그럼 바로 시작하겠습니다! Face ID 기능 설계 개요앱 실행 시 사용자의 얼굴 인증을 통해 잠금을 해제하고, 인증 성공 시에만 홈 화면(HomeView)으로 진입할 수 있도록 구현하였습니다. 구조는 아래처럼 구현하였습니다.앱 실행 → 잠금화면(Face ID 요청) → 인증 성공 → HomeView 진입 ↘ 인증 실패 시 에러 표시이 기능을 구현하기 위해서 크게 3가지를 구현했습니다.Face ID 인증 로직을 담은 AuthViewModel인증 인터페이스를 담당하..
[SwiftUI] SwiftUI 상태 동기화 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 제가 프로젝트를 진행하면서 발생한 문제와 해결 과정을 공유해보려고 합니다. 그럼 바로 시작하겠습니다! 프로젝트 소개우선 프로젝트에 대해서 간단하게 소개해보자면 인생네컷처럼 내 앨범에서 사진을 골라서 네 컷 사진을 만들 수 있는 앱을 개발하고 있었습니다. 사용자가 최대 4장의 사진을 선택하고, 원하는 사진을 삭제한 후, 새로운 사진을 추가할 수 있는 기능도 추가로 구현했습니다. 기본 구조는 아래처럼 설계를 했습니다.ContentView: 사진 선택 및 관리(네컷 이미지를 만드는 View)FourCutFrameModel: 프레임 데이터 모델PhotoModel: 개별 사진 데이터문제 발견 과정앱의 기본 기능은 완성하였지만 기능을 더 확장하고 싶다는 생각이 들었..
[SwiftUI] CADisplayLink를 활용한 부드러운 ProgressView 애니메이션 구현 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 서론애플리케이션에서 진행률을 시각적으로 표현할 때, SwiftUI에서는 기본으로 제공하는 기본 컴포넌트인 ProgressView를 사용해서 해당 UI를 구현하게 됩니다. 하지만 이러한 기본 애니메이션 방식으로는 시간 기반으로 자연스럽게 진행되는 부드러운 애니메이션을 구현하기 어렵습니다. 이번 포스팅에서는 SwiftUI의 애니메이션 한계로 겪었던 진행률 애니메이션이 끊겨 보이는 문제를 분석하고, UIkit의 CADisplayLink를 활용하여 해결한 경험에 대해서 정리를 해보려고 합니다. 문제 상황처음에 구현하고자 했던 기능은 진행률이 0%에서 100%까지 7초 동안 자연스럽게 증가하게 하는 것이었습니다. 기본적으로 SwiftUI에서는 다음과 같은 방식으로 애니메이션을 줄 ..