[SwiftUI] CADisplayLink를 활용한 부드러운 ProgressView 애니메이션 구현 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 서론애플리케이션에서 진행률을 시각적으로 표현할 때, SwiftUI에서는 기본으로 제공하는 기본 컴포넌트인 ProgressView를 사용해서 해당 UI를 구현하게 됩니다. 하지만 이러한 기본 애니메이션 방식으로는 시간 기반으로 자연스럽게 진행되는 부드러운 애니메이션을 구현하기 어렵습니다. 이번 포스팅에서는 SwiftUI의 애니메이션 한계로 겪었던 진행률 애니메이션이 끊겨 보이는 문제를 분석하고, UIkit의 CADisplayLink를 활용하여 해결한 경험에 대해서 정리를 해보려고 합니다. 문제 상황처음에 구현하고자 했던 기능은 진행률이 0%에서 100%까지 7초 동안 자연스럽게 증가하게 하는 것이었습니다. 기본적으로 SwiftUI에서는 다음과 같은 방식으로 애니메이션을 줄 ..
[SwiftUI] NavigationStack 사용 시 화면 전환 안 되는 문제와 title 깨짐 문제 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 오늘은 SwiftUI로 앱을 만들던 중 겪은 NavigationStack 관련 트러블슈팅 경험을 작성해보려고 합니다. 아기 울음소리를 녹음하고 아기 상태를 분석해주는 기능을 만들면서, 화면전환이 제대로 되지 않거나 navigation title 위치가 깨지는 이상한 버그를 마주했습니다. 구현 구조 요약우선 제가 구현한 기능의 주요 흐름은 아래와 같습니다.VoiceRecordView – 분석 시작 화면CryAnalysisProcessingView – 울음소리를 녹음하고 분석 진행CryAnalysisResultView – 분석 결과 화면CryAnalysisResultListView – 분석 기록을 모아보는 리스트 화면SwiftUI의 NavigationStack을 활용해서 각..
[SwiftUI] SwiftUI로 카메라 기능 구현하기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 SwiftUI와 AVFoundation을 사용해서 마치 인생네컷 포토 부스처럼 자동으로 촬영이 되는 카메라 기능을 만드는 법을 정리해보려고 합니다.  그럼 바로 시작하겠습니다! 기능 정리우선 카메라 앱을 만들기 전에 어떤 기능이 필요한지 먼저 정리를 해보겠습니다. 제가 만드는 앱에서는 크게 3가지 기능이 꼭 필요했습니다.자동 5초 카운트 다운 후 사진 촬영촬영된 사진 화면에 띄우기최대 4장의 사진 자동 촬영이렇게 3가지 입니다. 카메라 모델 구현먼저, AVFoundation을 사용해서 카메라 기능을 관리할 CameraModel 클래스를 만들어 보겠습니다.import AVFoundationimport SwiftUI@Observableclass CameraM..
[SwiftUI] ProgressView 생성하기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵  이번 포스팅에서는 SwiftUI에서 작업 완료까지의 진행률을 보여줄 수 있는 ProgressView를 만드는 방법에 대해서 정리를 해보려고 합니다. 그럼 바로 시작하겠습니다! ProgressView란?먼저 개념부터 짚고 넘어가겠습니다.  ProgressView는 이름에서 유추할 수 있듯이 앱 내에서 작업이 진행되고 있는 정도를 시각적으로 표시하는 View입니다. 이러한 ProgressView가 필요한 순간은 여러가지가 있겠지만 대표적인 예시로는 파일 다운로드 진행 상태를 앱에 표시하거나, 작업이 진행 중이지만 얼마나 오래 걸릴지 알 수 없을 때 등 다양한 상황에서 사용됩니다. ProgressView 스타일SwiftUI에서 ProgressView 스타일은 선형 스타일, 원..
[Swift] Actor 이해하기 (2/2)
·
Apple/Swift
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 저번 포스팅에 이어서 Actor에 대해서 마저 정리해보도록 하겠습니다. 혹시 지난번 포스팅이 궁금하신 분들은 여기를 참고해주세요! 그럼 바로 시작합니다! MainActor란?MainActor는 Swift에서 UI 업데이트와 같은 작업을 메인 스레드에서 실행하도록 보장하는 특수한 Actor입니다. Swift에서는 메인 스레드는 메인 액터(Main Actor)로 표현합니다. 다른 말로는 전역 액터(goabal actor)라고도 표현을 하는데 전역이라는 말에서 알 수 있듯이 메인 스레드에서 실행해야 할 코드를 프로그램 코드 전체에서 접근할 수 있기 때문입니다. 앱을 개발하다 보면 메인 액터에서 실행해야 하는 코드들이 있을 수 있습니다. 특히 UI를 업데이트 해..
[SwiftUI] 애니메이션과 전환 간단하게 알아보기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 SwiftUI에서 뷰를 애니메이션 하는 것과 앱 내에서의 전환에 대한 것을 한번 정리를 해보려고 합니다. 그럼 바로 시작하겠습니다! 암묵적 애니메이션SwiftUI에 뷰는 크기, 색상, 회전 각도, 불투명도 등 뷰의 외형을 제어하는 프로퍼티들을 가지고 있습니다. 이런 종류의 프로퍼티는 A라는 상태에서 B라는 상태로 바뀌는 것을 애니메이션 되게 할 수 있습니다. 이러한 상태 변화를 할 때 애니메이션이 나타나게 하는 방법 중 하나는 animation() 수정자를 사용하는 것입니다. 이것을 암묵적 애니메이션(implicit animation)이라고 부르는데, 애니메이션 수정자 앞에 있는 모든 수정자를 암묵적으로 애니메이션 되도록 만들어줍니다. 애니메이션 효과를 ..