분류 전체보기
-
[SwiftUI] 커스텀 ProgressView 만들기 (feat. 특이한 모양 Progress 애니메이션)개발/Swift 2025. 8. 19. 09:41
SwiftUI에서 제공하는 기본 ProgressView는 간단한 진행 상태를 보여주기엔 편리하지만, 디자인이 조금만 특별해져도 한계에 부딪힙니다. 예를 들어 ㅇ-ㅇ-ㅇ-ㅇ처럼 단계별로 끊어지는 형태의 프로그레스 바를 구현해야 한다면 어떻게 해야 할까요?이럴 땐 직접 그리는 것이 오히려 더 직관적이고 편한 방법이 될 수 있습니다. 이번 글에서는 ZStack과 mask를 활용해 독특한 모양의 프로그레스 뷰를 만들고, 자연스러운 애니메이션까지 구현하는 과정을 단계별로 알아보겠습니다.1단계: 프로그레스 '모양' 그리기가장 먼저 할 일은 프로그레스 바의 전체적인 모양, 즉 '트랙(Track)'을 만드는 것입니다. HStack 안에서 ForEach를 사용해 원(Circle)과 사각형(Rectangle)을 반복해서 ..
-
SwiftUI Text에 gradient 를 적용하는 방법 .mask() (그라데이션 텍스트)개발/Swift 2025. 8. 14. 09:32
HStack { Text(title) .font(.system(size: 14, weight: .bold)) .foregroundStyle(Color.white) .padding(.leading, 20) .padding(.top, 12) .padding(.bottom, 8) Spacer() } .background( LinearGradient( gradient: Gradient(colors: [Color(UIColor(hex: "3D77FF")), Color(UIColor(hex: "9B3DFF"))]), startPoint: .leading, e..
-
SwiftUI ScrollView내에서 Tap, DragGesture 충돌 문제 해결 방법 (SwiftUI touchDown 이벤트)개발/Swift 2025. 8. 8. 12:39
SwiftUI에서 ScrollView 내에 있는 특정 컴포넌트에 여러 제스처를 동시에 적용해야 하는 경우가 있습니다. 이 글에서는 다음과 같은 요구사항을 해결하는 과정에서 겪었던 문제와 최종 해결책을 공유합니다.✅ 최종 목표터치다운 & 터치업: 사용자가 컴포넌트를 누르거나 뗄 때(영역 안팎 무관) 스케일 애니메이션이 즉시 실행되어야 합니다.탭 이벤트: 사용자가 컴포넌트 영역 안에서 손을 떼었을 때(Tap) 특정 액션이 실행되어야 합니다.스크롤: ScrollView의 스크롤 기능은 정상적으로 동작해야 합니다. ❌ 문제 상황: 제스처 충돌가장 먼저 떠오른 방법은 onTapGesture와 DragGesture를 함께 사용하는 것이었습니다.DragGesture의 minimumDistance를 0으로 설정하면 터..
-
SwiftUI BottomSheet Modifier 모디파이어 ViewModifier개발/Swift 2025. 7. 30. 13:45
SwiftUI + TCA 강의 보러가기 SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처| 덤벨로퍼 - 인프런 강의복잡한 SwiftUI 상태 관리, TCA (The Composable Architecture)로 깔끔하고 견고한 앱을 만드세요. 실전 프로젝트 예제로 핵심만 빠르게 배웁니다. TCA의 핵심 요소(State, Action, Reducer, Store)를 이해하고, Swww.inflearn.com SwiftUI 커스텀 바텀 시트 (BottomSheet) 모디파이어 구현SwiftUI에서 여러 종류의 바텀 시트를 띄워야 하는 상황에 대한 해결책을 제시합니다. 기본적으로 제공되는 `sheet()`나 다른 방법들도 있지만, 현재 **iOS 타겟과 탭바 위로 시트를 띄워야 하는 ..
-
Rxswift Observable 타이머: 서버 시간 동기화 (디바이스 시간 문제)개발/Swift 2025. 7. 22. 16:11
RxSwift 강의 보러가기 RxSwift 와 반응형 프로그래밍| 덤벨로퍼 - 인프런 강의RxSwift의 기초와 활용법을 다루는 강의입니다 RxSwift와 반응형 프로그래밍 기초, RxSwift 의 여러 Operator 활용법, ReactorKit 상태 관리 프로그래밍에서의 Rx활용, CoreData 활용하여 데이터 CRUD, AutoLayout과www.inflearn.com --> -->Rxswift Observable 타이머: 서버 시간 동기화이 글에서는 Swift에서 타이머를 구현할 때 발생할 수 있는 문제점들을 파악하고, 이를 **신뢰할 수 있는 형태로 개선하는 방법**에 대해 다룹니다.타이머 기본 구현 (디바이스 시간 기준)우선, 현재 시간을 기준으로 남은 시간을 초로 계산하여 타이머를 구..
-
ReactorKit transform 중복 호출 문제 해결 Cold Observable 사용 주의점 (.share())개발/Swift 2025. 7. 15. 16:08
ReactorKit transform 중복 호출 문제 완벽 해결 가이드 (.share()) ReactorKit에서 transform(mutation:)은 Mutation 스트림을 변형할 수 있는 강력한 기능입니다. 하지만 Cold Observable의 특성을 이해하지 못하고 사용하면 모든 액션이 두 번씩 처리되는 심각한 버그를 마주할 수 있습니다. 이 글에서는 문제의 원인과 .share()를 이용한 명쾌한 해결법을 알아봅니다. 문제 상황: 모든 액션이 두 번씩 처리되다 특정 Mutation(setAlternateTooltipMessages)을 다른 Mutation(setTooltipMessage) 스트림으로 변환 후,..
-
UILabel에 HTML 적용하는 법: NSAttributedString 변환 및 스타일 적용개발/Swift 2025. 7. 11. 15:27
UILabel에 HTML 적용하는 법: NSAttributedString 변환 및 스타일 적용요구조건에 의해 HTML 태그를 UILabel에 적용해야 했습니다.이를 위해서는 HTML String을 NSAttributedString으로 변환해야 합니다.1. HTML을 NSAttributedString으로 변환하는 코드// ***htmlText : String***guard let data = ***htmlText***.data(using: .utf8) else { return nil}let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [ .documentType: NSAttributedString.DocumentType.html,..
-
RxSwift: Observable.interval 타이머, 재구독 문제: 기존 구독 끊기개발/Swift 2025. 7. 3. 09:38
https://inf.run/iDaq4 SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처 강의 | 덤벨로퍼 - 인프런덤벨로퍼 | 복잡한 SwiftUI 상태 관리, TCA (The Composable Architecture)로 깔끔하고 견고한 앱을 만드세요. 실전 프로젝트 예제로 핵심만 빠르게 배웁니다. , SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대www.inflearn.com RxSwift: Observable.interval Observable.interval은 RxSwift에서 타이머 기능을 간단하게 구현할 수 있는 강력한 오퍼레이터입니다 예를 들어, 다음과 같이 startTimer 함수를 사용하여 특정 종료 시간까지 1초마다 남은 시간을 업데이트하는 타이..