SwiftUI5 SwiftUI) Preview 크래시 발생 사례 (EnvironmentObject) 스유를 사용하다보면 Preview에서 크래시가 종종 일어난다. 사실 이전에 Preview 크래시 관련 글을 작성했었는데, 그땐 일반적인 문제보다 특수 경우였고 xcode 버그로 판명났다. 근데 그 글이 구글에 Preview 크래시 관련해서 검색하면 제일 상단에 떠서 사람들 유입이 계속 있었다. 그래서 개발하던 도중 많이 봐왔던 사례에 관해 글을 쓰려고 한다. 일반적으로 코드에 문제가 있는 경우 xcode 자체에서 오류를 발생시켜서 개발자가 인지하게 해준다. 하지만 Preview 크래시의 경우 xcode가 안잡아주는 경우가 있고 그래서 뭐가 문젠지 모를 때가 많다. 글 이해에 도움을 줌 - 사례를 순서대로 읽으시는 것을 권장 - 코드를 긁어다가 주석을 해제해서 비교하기 Data binding, Enviro.. 2024. 1. 17. SwiftUI)토스 주식 탭 애니메이션 구현하기 구현환경 iOS 16.4 +, iPhone 14 Pro Max 기준으로 SwiftUI를 사용하였다. 다크모드 대응은 따로 안했다. 내 폰이 12프맥이라서 실제 토스 앱과 사이즈를 비슷하게 하기 위해 이번에도 14프맥을 기준으로 구현했다. 목표 애니메이션 구현 + 애니메이션이 포함된 뷰를 구현하기 1. 목표 애니메이션: 토스증권 옆 종합지수가 번갈아가면서 보여지는 애니메이션 2. 네비게이션 바 부분: 스크롤이 올라가면서 서서히 드러나는 1번과 동일한 애니메이션 3. 내 주식 & 오늘의 발견 버튼 부분 - 스크롤이 올라가면 네비게이션바 부분까지만 올라갔다가 이후엔 고정되어 네비게이션바의 역할을 함 - 버튼을 누르면 탭이 바뀌고, 버튼 밑의 라인이 옆으로 매끄럽게 이동함 과정 및 고민 1. 애니메이션 구현부 .. 2023. 6. 6. SwiftUI) 토스 애니메이션 구현해보기 앱에 필요한 것은 사용자가 원하는 서비스를 제공하는 것, 사용성이 있다. 토스 앱을 사용해보면 상큼발랄한 애니메이션이 여기저기 보이고 이로 인해 앱에서 젊은 바이브와 간편하다는 느낌을 받을 수 있다. 토스 앱에 들어간 애니메이션 중 하나를 구현해보았다. 구현환경 iOS 16.0 +, iPhone 14 Pro Max 기준으로 SwiftUI를 사용하였고 사용된 라이브러리는 로티(Lottie)이다. 내 폰이 12프맥이라서 실제 토스 앱과 사이즈를 비슷하게 하기 위해 14프맥으로 설정했다. 목표 애니메이션 구현 + 애니메이션이 포함된 뷰를 구현하기 과정 및 고민 1. 셀모양을 Rectangle()로 할지 VStack에 백그라운드를 줄지 고민이 됐다. Rectangle로 하면 오버레이나 ZStack으로 UI들을 .. 2023. 5. 23. SwiftUI)Preview Crashed는 왜 일어날까 스유를 하다보면 Preview가 아주 유용하다는 것을 알 수 있다. 일일이 시뮬을 구동하여 확인하지 않아도 되고, 셀렉터블 프리뷰를 이용하여 컴포넌트들이 차지하는 공간을 확인할 수 있는 것이 특히 장점이다. 평소 프리뷰 크래시를 많이 겪었던 사례 MVVM 패턴에서 EnvironmentObject를 사용할 때이다. 하위 뷰에서 객체를 쓰고, 상위뷰에서 객체를 안쓴다고 프리뷰에 .environmentObject를 안써줬다간 바로 크래시가 난다. 관련해서는 따로 글을 작성했다. https://yahoth.tistory.com/16 SwiftUI) Preview 크래시 발생 사례 (EnvironmentObject) 스유를 사용하다보면 Preview에서 크래시가 종종 일어난다. 사실 이전에 Preview 크래시 .. 2023. 4. 10. [이해하기 어려웠던 개념] filter (feat. 연산프로퍼티, Toggle) SwiftUI tutorial을 따라하며 공부 중 이해가 어려웠던 개념이 있다. 데이터에 대한 간단한 설명을 하자면 아래의 json파일은 하나의 landmark 이고, 각지의 Landmark들을 모아서 파싱한 배열이 landmarks 이다. 그리고 이해가 안됐던 문제의 코드를 보여드립니다. //toggle에 바인딩 되는 bool 값 @State private var showFavoritesOnly = false //List에 뿌려지는 배열(조건에 따라 다른 항목을 반환하는 연산프로퍼티) var filteredLandmarks: [Landmark] { landmarks.filter { landmark in (!showFavoritesOnly || landmark.isFavorite) } } List { T.. 2022. 12. 8. 이전 1 다음