분류 전체보기
-
SwiftUI에서 UIKit Push 네비게이션 구현하기 (탭 바 오버레이)개발/Swift 2025. 11. 6. 09:47
🚀 SwiftUI에서 UIKit Push 네비게이션 구현하기 (탭 바 오버레이) 이 문서는 SwiftUI 환경에서 NavigationStack 사용이 어려운 iOS 버전(16 미만) 또는 특정 UIKit 구조(탭 바) 위로 페이지를 Push 하여 탭 바를 덮도록 구현하는 방법을 설명합니다. 1. SwiftUI 기본 네비게이션의 한계 1.1. iOS 16+의 표준 방식 iOS 16 이상을 타겟팅할 경우, SwiftUI의 네비게이션은 NavigationStack 및 navigationDestination(item:destination:)을 사용하여 UIKit의 Push와 유사하게 페이지를 쌓을 수 있습니다. 🚨 제한: 'navigationDestination(item:desti..
-
[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,..