[SwiftUI] Infinite Carousel 구현하기 1 (feat. Timer)
·
Dev/구현
문제 프로모션 팝업 화면을 담당하며 무한 스크롤(이미지 배열 순환)과 타이머 작동을 동시에 구현해야 했다. 내가 구현하고자 했던 기능은 다음과 같다. 무한 순환 스크롤: 첫 번째 인덱스 이미지에서 왼쪽으로 스와이프하면 마지막 인덱스 이미지가 나오고, 마지막 인덱스에서 오른쪽으로 스와이프하면 첫 번째 인덱스 이미지가 나오는 구조를 만든다.자동 이미지 변경: 별도의 제스처가 없으면 3초마다 이미지가 자동으로 변경되고, 이미지 배열이 순환되도록 한다.수동 제어: 사용자가 수동으로 스와이프하면 배열 순서에 맞게 이미지가 변경되고, 인디케이터도 함께 변경된다. 하지만 구현 과정에서 몇 가지 문제에 부딪혔다. 이미지를 반만 스와이프했을 때, 반쯤 보이는 이미지들이 이전/다음 이미지로 변경되는 동시에 타이머가 작..
[SwiftUI] scrollTargetLayout과 ScrollTargetBehavior
·
Dev/SwiftUI
iOS 17 이전까지 ScrollView는 제한적인 부분이 많았다. 특히 오프셋을 직접 구현해서 페이징 기능을 커스텀으로 만들어야 하는 불편함이 있었지만, 애플이 iOS 17에 scrollTargetLayout과 scrollTargetBehavior를 추가하면서 이제 단 두 줄의 코드만으로 이 기능 구현이 가능해졌다. 우선, 해당 기능에 대해 애플문서로 간략하게 알아보자. 정의scrollTargetLayout스크롤 액션이 일어날 때 어떤 레이아웃을 기점으로 스크롤이 이루어질지 정하는 역할을 한다.ViewAlignedScrollTargetBehavior와 함께 사용되어 스크롤 뷰가 특정 뷰나 콘텐츠에 정확히 정렬되도록 돕는다. ScrollTargetBehavior스크롤 가능한 뷰의 스크롤 동작을 정의하..
[SwiftUI] pagerView 만들기 (iOS 버전대응)
·
Dev/구현
회사 프로젝트에서 스크롤 뷰로 구현되어 있던 부분에 페이징 기능을 추가해달라는 기획서 수정이 있었다. UIKit으로 구현되어 있었다면 UIPageViewController를 사용하면 되겠지만, 프로젝트를 SwiftUI 중심으로 작업 중인 상황이라 생각보다 기획서대로 개발하는 것이 까다로웠다. 까다로웠던 이유는 두 가지였다.SwiftUI의 ScrollView는 커스텀이 제한적이라는 점회사 프로젝트의 최소 버전이 iOS 15 이상이라는 점그래도 iOS 17 이상부터 애플이 ScrollView의 기능을 대폭 추가 및 개선해 주어서 사실상 문제가 없었는데, 문제는 ScrollView의 버전 대응이었다. https://developer.apple.com/support/app-store App Store - S..
[HIG] Accessibility (접근성)
·
Design/HIG
실용적인 앱을 만들려면 무엇을 공부하고 고려해야 할지 고민하다가, 언젠가 봐야겠다고 생각했던 애플의 Human Interface Guidelines (HIG) 중 접근성(Accessibility) 문서를 파고들어 정리해 보았다. 단순히 문서를 읽고 이해한 대로 정리한 것이지만, 공식 가이드를 전체적으로 살펴보는 것이기에 매우 의미 있는 작업이라 생각한다. 최근 회사 새 프로젝트에 참여하면서 기획이나 디자인 단계에서 iOS 구현 가능 여부를 팀과 논의해야 할 때가 종종 있는데, 직접 구현해 보기 전까지는 나 역시 잘 모를 때가 있어 앞으로 이런 상황에서 큰 도움이 될 것이라 기대한다. 특히 이번에 정리하면서 텍스트 파트에서 많은 것을 배웠다. 개인 앱 업데이트 시 내가 놓쳤던 부분들을 다시 한번 고려해봐야..
[직관로그] v.1.3.x
·
직관로그 (출시앱)/업데이트
0. 업데이트 예정예상 작업기간: 24.07 ~ 24.08 - SwiftUI 리팩토링회사 입사 후 첫 달 빼곤 모두 SwiftUI로 작업하는 바람에 어느새 스유가 더 편해지고 말았다. UIKit로 개발한 직관로그를 시간이 조금 걸리더라도 스유로 리팩토링하기로 했다. - UIUX 리뉴얼이번 업데이트의 가장 큰 변화는 UIUX가 아닐까 싶다. 혼자서 기획, 개발, 디자인을 한 앱을 출시했단 점에서 스스로 자랑스러웠으나, 그 당시엔 이렇게 사용자가 많아질 줄 몰랐다. 그래서 사용자가 천 여명이 되었을 때부터 디자인이 너무 마음에 들지 않아서 + 디자인 이슈와 관련된 문의사항이 접수 되면서 UI를 꼭 리뉴얼 하고자 했었다. 마침 좋은 기회로 디자이너분과 6월달쯤부터 함께 작업하게 되어서 현재 UIUX 수정이 진..
[SwiftUI] Property Wrapper 총정리
·
Dev/SwiftUI
SwiftUI는 선언형 UI 프레임워크로, 뷰의 상태 변화에 따라 UI가 자동으로 업데이트되는 강력한 기능을 제공한다. 이러한 자동 업데이트의 핵심에는 PropertyWrapper가 있다. PropertyWrapper는 데이터를 캡슐화하고 특정 로직을 적용하여 뷰와 데이터 간의 효율적인 통신을 가능하게 한다. 이 글에서는 SwiftUI 개발에 필수적인 다양한 PropertyWrapper의 개념과 용도, 그리고 iOS 17에서 새로 도입된 @Bindable까지 훑어가는 방식으로 정말 간단하게 다뤄보기로 했다. PropertyWrapper정의Swift 5.1 버전부터 도입된 문법정의된 property가 있을 때 해당 property를 감싸서 특별한 타입으로 만들어준다프로퍼티를 저장하는 코드와 프로퍼티..