[SwiftUI] LifeCycle
·
Dev/SwiftUI
UIKit과 SwiftUI는 생명주기가 다르다. SwiftUI로 뷰를 그리고 로직을 작성하다 보면 viewDidLoad처럼 onAppear를 사용하다가 기대한 대로 동작하지 않는 경험을 한 적이 있다. 검색해 보니 UIKit과 달라진 생명주기 델리게이트와 연관이 있었기에, 두 프레임워크 중 SwiftUI의 생명주기 API를 정리해 본다. 전반적인 iOS 앱 생명주기에 대한 내용은 아래 포스트에 정리한 바 있다. https://calliek.tistory.com/28 [UIKit] 앱의 생명주기✔︎ 생명주기 (Life Cycle) 생명주기란, 앱이 최초로 실행되는 시점부터 종료되는 시점까지의 상태를 의미한다.그렇다면 이런 앱의 상태가 무엇인가 하면, "the current state of your app ..
[SwiftUI] ObservableObject, ObservedObject, Published
·
Dev/SwiftUI
SwiftUI로 뷰와 로직을 작성하다 보면 데이터 관리에 대한 고민에 부딪히게 된다.특히 여러 뷰에서 동일한 데이터를 공유하고 업데이트해야 하는 상황에서 State나 Binding만으로는 한계가 있다. 이때 Combine 프레임워크의 핵심 요소인ObservableObject, ObservedObject, 그리고 Published를 이해하는 것이 중요하다. State와 Binding은 주로 상위-하위 뷰 간의 명확한 데이터 흐름에 적합하며, 단일 뷰 내부 또는 계층적으로 연결된 뷰에서 사용하기 좋다. 하지만 외부에 선언된 값을 여러 뷰에서 관찰하고 그 값의 변화에 따라 UI를 업데이트해야 하는 상황에서는 이벤트 변화를 관찰하는 ObservableObject와 ObservedObject가 더 적합하다. ..
[SwiftUI] Navigation
·
Dev/SwiftUI
참여 중인 회사 프로젝트에서 UIKit과 SwiftUI 프레임워크를 함께 사용하고 있다. 탭바와 같은 화면 전환은 UIKit을 사용하고 있지만 사실 SwiftUI의 내비게이션 기능을 제대로 사용해 본 경험이 없었다. 대신 틈나는 대로 직관로그 UI를 SwiftUI로 리팩토링하고 있어서 겸사겸사 화면 전환 관련 로직을 다루기 전 사전 학습으로 SwiftUI의 내비게이션을 조금 뜯어보기로 했다. 참고로, 이 글에서 다룰 Navigation은 iOS 16 이상을 기준으로 작성했다. iOS 16 이전엔 NavigationView를 사용했지만, iOS 16에선 해당 API가 deprecated가 되었다.이 글에선 NavigationView에 대한 내용은 다루지 않을 예정이다. 애플 공식 문서에 따르면,..
[직관로그] v.1.3.1 배포
·
직관로그 (출시앱)/업데이트
v.1.3.1에서의 변화작성화면 UIUX 개선경기장 추가 작성 UX 개선 날짜변경기존엔 날짜 변경이 안 되었는데, 문의사항에 빈도 높게 있던 부분이라 수정했다. 경기장경기장 추가는 이전 계획대로 user가 등록하도록 로직을 수정 했다가, 잠시 보류하고 요청 있던 경기장들을 추가하는 걸로 임시로 대체했다. 얼럿등록을 위한 최소한의 조건을 만족하지 않으면 그때마다 얼럿을 띄웠는데, 사용자 입장에서 성가시고 해당 부분에 대해 글자수를 늘려달라는 등의 문의요청에 고민했다. 얼럿은 경기장 선택 조건 불충족 시에만 띄우고, 나머지는 글자입력수를 텍스트필드에서 지정해놓고, 조건을 충족할 때까지 버튼 비활성화 하는 방식으로 변경했다.사실 텍스트필드 색 변경 등으로 rxSwift 식으로 조금 더 UIUX 개선을 할 ..
[SwiftUI] Infinite Carousel 구현하기 2 (feat.Timer)
·
Dev/구현
회사 프로젝트에서 프로모션 팝업 화면을 담당하며 무한 스크롤과 타이머 작동을 동시에 구현해야 했다.그런데 이게 생각보다 만만치 않았다. 불과 일주일 전 같은 맥락의 게시글을 작성했었는데,그 방식대로 구현하면 타이머가 작동할 때 인덱스 변경 시 애니메이션이 적용되지 않는 문제가 발생했다. 그래서 해당 글에 추가해 두었던 블로그 글을 참고하여 전면 수정을 시도했다.하지만 이번에는 드래그를 할 때 해당 인덱스의 화면이 드래그되는 모습이 보이지 않고,액션이 다 끝난 후에야 슬라이드 애니메이션으로 화면이 전환되는 문제가 생겼다. 이전 글: https://calliek.tistory.com/62 [SwiftUI] TabView + DragGesture로 무한 스크롤 타이머 조절하기프로모션 팝업 화면을 담당해서 만들..
[직관로그] v.1.3.0 배포
·
직관로그 (출시앱)/업데이트
2024년 8월 26일 약 4개월만에 직관로그의 1.3.0 버전이 배포 되었다. v.1.3.0에서의 변화1. 탭 변화기존 탭 메뉴인 [캘린더, 기록, 날씨]에서 [캘린더, 기록, 통계, 설정]으로 변경2. 설정 탭 메뉴 변화자주 묻는 질문 추가앱 버전 추가 -> 현재 버전이 아닐 시 업데이트 유도 버튼 및 화면전환 추가기존 문의하기는 이메일을 보내는 형식이었으나, 현재는 구글폼으로 유도3. SwiftUI 리팩토링설정 탭메뉴 + 설정 뎁스 화면은 모두 SwiftUI로 리팩토링통계 탭의 요약하기 화면 (툴팁, 이미지옵션필터화면) SwiftUI로 리팩토링 4. 아이콘 변경무료 아이콘이 아닌 직관로그라는 앱에 맞게 외주 맡긴 커스텀 디자인 아이콘5. 마이너 수정캘린더의 날짜 선택 바텀시트 UI 수정 ..