일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Concurrency
- RxSwift
- WWDC
- realitykit
- swift
- ar
- UIKit
- state
- Network
- environmentobjet
- authentication
- SwiftUI
- gesture
- firebase
- combine
- arkit
- 데이터최적화
- iphone
- Animation
- CS
- 달력
- ios
- auth
- GCD
- 네트워크
- Performance
- fullscreencover
- stateobject
- dataflow
- withAnimation
- Today
- Total
목록Swift/SwiftUI (16)
XLOG
SwiftUI 만으론 QR Code Scanner를 만들 수 없다...... 그 이유는 UIKit Framework 가 필요하다. AVFoundation, AVCaptureMetadataOutputObjectsDelegate 를 사용하기 위해서...... 우선 AVFoundation 은 swift 에서 제공하는 Audio, Video 를 다루기 위한 frameworkd 다. 여기서의 핵심은 AVCaptureSession 을 사용하는 것이다. 디바이스로 부터 들어온 데이터를 출력해주는 세션, 즉 input 과 Output을 연결해주는 역할을 한다. 우리는 이 센션에 AVCaptureDeviceInput 을 Input으로 추가, 가져온 메타데이터를 위해 AVCaptureMetadataOutput 을 oupu..
이전 Posting 에 달력에 활용할 무한스크롤에 대한 아이디어를 적어서 포스팅 한 적이 있다. 그래서 이번엔 그 스크롤에 활용할 달력을 만들어 보려고 한다. 그러기 위해선 Swift 에서 날짜를 다루는 것들에 대해 먼저 알아봐야 한다. 그래서 Date, Calendar 를 확인할 예정이다. 우선 Date 기본 파라미터 없이 init을 하게 되면 현재 날짜와 시간을 알려준다. 여기서 timeInterval 은 시간차(초 단위) 날짜를 구한다고 알고 있으면 된다. Calendar 는 달력유닛과 특정 시점으로 정의를 내려준다고 한다. 그리고 날짜 계산 및 비교도 제공을 해준다. 여기서 달력 유닛은 말그대로 달력의 종류인데 일반적으로 양력(그레고리언) 을 사용한다. 이것과 관련된 설정으로 아이폰에서 일반 > ..
작년에 SwiftUI를 공부하면서 캘린더를 만들어야 하는 상황이 있었다. 단순히 버튼을 눌러 값을 변화시키는 것이라면 조금은 간단할 수 있지만, 기본 제공 달력 처럼 Scroll Animation 효과가 있어야 한다. 기본적인 Infinity Scroll의 경우 한 방향으로 지속적으로 작동, 값을 추가만 하면 된다. 하지만 달력의 경우 좌, 우 즉 값이 추가되거나 감소되거나 해야한다. 무작정 사람이 스크롤 할 만한 범위의 값을 불러와서 만들기는 싫었다. 내가 생각한 아이디어는 3주치의 배열을 계속해서 바꿔주는 것이다. Paging을 사용하게 되면 쉽게 될 줄 알았지만 값의 변화에 따른 View의 재생성되는 과정이 매끄럽지 못했다. 그 당시 생각할 수 있었던 아이디어는 HStack 의 특성을 이용하여 of..
우리는 onAppear 와 같은 sync context 내에서 비동기 함수를 실행하고 싶을 수 있다. 하지만 사용하려고 하면 error 가 발생을 한다. 이러한 에러를 해결하기 위해선 sync 세계와 async 세계를 연결해줄 다리역할을 하는 것이 필요하다. 그것은 바로 Task 이다. wwdc21 Meet async/await in Swift 에서 말하길 Task 를 만나면 가용한 thread 에 작업을 할당해 준다고 한다. 공식문서에서도 비동기작업 유닛이라고 나온다. 예시코드 참고 - WWDC21 Meet Async/await in Swift - 공식문서
사용할 방법은 GeometryReader 와 preference 를 이용한다. 그러기 위해 우리는 GeometryReader 를 먼저 알아야 한다. GeometryReader는 컨테이너 뷰가 가지고 있는 사이즈, 좌표공간을 반환해주는 함수 이다. 그렇다면 preference 란 무엇일까? 주어진 preference(선호?)로 값을 set 해준다는게 무슨 말일까….. 이것은 SwiftUI 가 view의 사이즈, 위치를 어떻게 결정을 하는지에 대한 원리에 대한 이해가 필요하다. 자세히 작성을 하다보면 내용이 너무 길어진다. 그냥 간단하게 보통 상위뷰에서 하위뷰로 데이터를 전달하는데 가끔 우리는 하위뷰에서 상위뷰로 데이터를 전달을 하고 싶을 때가 생긴다. 그때 하위뷰가 원하는(선호하는) 데이터(사이즈, 위치 ..
ForEach 를 사용하여 카드컴포넌트를 구성한 후, 각 컴퍼넌트에 onTapGesture를 적용했더니, 터치 영역에 문제가 생겼다. 인덱스 0 번의 컴퍼넌트 중간 아래부분 부터는 인덱스 1번 영역으로 터치가 인식되는 것이었다. resizable을 적용한 후, onTapGesture를 적용하였지만, resizable이 먹히지 않은 것 같다는 생각에 검색을 해봤다. 기존 코드 예시 var body: som View { ForEach(Array(myArray.enumerated()), id: \.offset) { index, item in cardView(item: item, index: index)) } } @ViewBuilder func cardView(item: itemType, index: Int) ..