개발/Swift
-
SwiftUI TCA 파일 첨부 - 문서 파일 업로드, 다운로드, 저장 기능개발/Swift 2025. 6. 20. 09:36
https://inf.run/iDaq4 SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처 강의 | 덤벨로퍼 - 인프런덤벨로퍼 | 복잡한 SwiftUI 상태 관리, TCA (The Composable Architecture)로 깔끔하고 견고한 앱을 만드세요. 실전 프로젝트 예제로 핵심만 빠르게 배웁니다. , SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대www.inflearn.com SwiftUI TCA 파일 첨부 - 업로드, 다운로드, 저장 기능이 글에서는 SwiftUI TCA 환경에서 파일 첨부 및 관리 기능을 구현하는 포괄적인 방법을 설명합니다. 사용자 친화적인 파일 첨부부터 서버 통신, 그리고 기기 내 저장까지 모든 과정을 상세히 다룹니다.1. 파일 불러오기 (I..
-
SwiftData 기본 사용법 Model, ModelContext, Query개발/Swift 2025. 5. 8. 09:03
이번 글에서는 SwiftData의 핵심 요소인 Model, ModelContext, Query의 기본 사용법을 자세히 다룹니다. SwiftData를 활용하여 효율적인 데이터 관리를 시작해 보세요! -------------------------------------------------------------------------------- 엔티티 정의 (Model) SwiftData에서 데이터를 저장하기 위해서는 먼저 엔티티를 정의해야 합니다. @Model 매크로를 사용하여 쉽게 데이터 모델을 생성할 수 있습니다. Identifiable 프로토콜을 채택하는 것이 일반적입니다.@Model final class User: Identifiable { var name: String var email..
-
SwiftUI TextEditor 자동 스크롤 버그 오류 해결 (커서 문제)개발/Swift 2025. 4. 18. 17:20
💬 문제 상황: 내 마음대로 움직이는 스크롤앱에서 긴 글을 작성하거나 수정하는 기능을 만들 때, 우리는 보통 TextEditor를 사용하고 내용이 길어지면 당연히 ScrollView로 감싸줍니다. 하지만 바로 이 지점에서 문제가 발생합니다.어떤 문제인가요?TextEditor에 텍스트가 화면을 넘어갈 정도로 길어집니다.수정을 위해 TextEditor의 윗부분을 터치(focus)합니다.분명히 위쪽을 터치했는데, 스크롤이 제멋대로 맨 아래로 쭉 내려가 버립니다.또 텍스트 입력시 스크롤이 되돌아 가지도 않고마지막줄 줄 넘김에도 스크롤이 커서를 따라가지 않는 문제도 있음아래는 바로 그 문제의 상황을 재현한 코드입니다.// MARK: 문제가 발생하는 코드struct ContentView: View { ..
-
SwiftUI TextEditor 오류 - 긴 text 내용이 minHeight에 잘리는 문제 (onAppear, task)개발/Swift 2025. 4. 18. 17:10
의도한 동작은 최소 160의 높이를 가지고 내용이 길수록 TextEditor도 늘어나야 함 TextEditor(text: $store.content.sending(\\.setContent)) .focused($focusedField, equals: .content) .frame(minHeight: 160) .font(.system(size: 16)) .padding(.top, 16)내용을 처음부터 입력 할떄는 정상 동작하지만처음부터 content 가 길 경우 160 높이 에서 잘림, 입력하면 동적으로 늘어남 OnAppear 이후에 컨텐츠 갱신..
-
Observable → Async / Await 으로 변환하여 API 처리하기: AsyncThrowingStream, withCheckedThrowingContinuation 완벽 가이드개발/Swift 2025. 4. 16. 16:35
이번 글에서는 Rx Observable 기반의 기존 API 호출 로직을 Swift의 async/await 구조로 효율적으로 변환하는 방법을 다룹니다. 특히, 단일 호출에는 withCheckedThrowingContinuation을, 지속적인 응답이나 웹소켓에는 AsyncThrowingStream 또는 AsyncStream을 활용하는 방법을 자세히 알아보겠습니다. -------------------------------------------------------------------------------- 기존 Observable 기반 삭제 기능의 문제점기존 앱의 삭제 기능은 Observable을 사용하여 구현되어 있었습니다.private func deleteImage(accessKey: String) -..
-
SwiftUI TextEditor에 키보드 toolbar가 노출되지 않는 오류개발/Swift 2025. 4. 16. 16:31
ScrollView 내부에 두개의 TextEditor가있다 ScrollView { VStack(spacing: 0) { if case .post = store.contentType { TextEditor(text: $store.title.sending(\\.setTitle)) .focused($focusedField, equals: .title) .frame(minHeight: 30) .frame(maxWidth: .infinity) .font(.system(size: 18, weight: .bold)) .padding(.top, 24..
-
[Swift] 애니메이션 정지 재생 CGAffineTransform개발/Swift 2025. 4. 11. 17:11
애니메이션 정지 재생탭 이벤트를 적용할떄 탭을 눌렀다가 떼었을때 처리를 위해서는 Tap Gesture보다는LongPressGesture를 활용하는게 더 간편한다 let tapGesture = UILongPressGestureRecognizer() tapGesture.minimumPressDuration = 0 optionView.addGestureRecognizer(tapGesture)minimumPressDuration 을 0으로 지정하면누르자마자 gesutre.state 가 began 되므로바로 터치다운 이벤트를 시작할수있다 switch gestureState { case .began: optionView.transform = CGAffineTransform(scaleX: 0.9, ..
-
UIKit SwiftUI에서 자동 스크롤개발/Swift 2025. 4. 8. 15:24
UIKit 자동 스크롤자동(동적) 스크롤 하기 위해 uikit 에서도 scrollRectToVisible 제공해줌 layoutIfNeeded() // Init 직후에 아직 내부 레이아웃이 안잡혀서 호출 필요 scrollRectToVisible(button.frame, animated: true) // ScrollView 기능근데 이게 스유 처럼 가운데로 보내주는게 아니라그냥 보이게만 해준다.스크롤 하려는 저 button 이 화면에 아예 안보이면 잘 동작하는데만약 왼쪽 찔끔 나온 상태라면 움직이지 않는 문제가 있음따라서 별도로 스크롤을 계산하여 setContentOffset 호출이 필요함layoutIfNeeded()let buttonCenterX = button.center.x DispatchQueu..