
Why ? TabView를 구성하던 중 UIKit 을 사용할 때 처럼 익숙하게 사용하기 위해 정리한다. TabView ? 정의 우선 공식문서를 먼저 보자. A view that switches between multiple child views using interactive user interface elements. 사용자 인터페이스 요소를 사용해 여러 하위 뷰 간 전환할 수 있도록 하는 뷰이다. 탭바의 항목을 터치하여 화면을 전환할 수 있게 해준다. 기본 구현 TabView { ReceivedView() .badge(2) .tabItem { Label("Received", systemImage: "tray.and.arrow.down.fill") } SentView() .tabItem { Label(..

Why ? 스와이프하면 다음 카드로 이동하는 UI를 그리고 싶어서 Horizontal ScrollView를 사용했다가 스와이프하면 자동으로 중심을 맞춰주는 뷰를 구현하고 싶었다. How ? GeometryReader를 활용했다. GeometryReader { proxy in // 스크롤하면 움직일 x축의 값 let xOffsetToShift = cardWidth + spacing HStack(spacing: 10) { ForEach(Array(viewModel.places.enumerated()), id: \\.0) { idx, place in viewModel.createPlaceCard(place: place, index: idx) } } .padding(.leading, 22) // xOffsetT..
Why ? 화면에서 2.5초 후에 네비게이션이 실행해야는 상황이였다. How ? NavigationLink(destination: NextView(), isActive: $isShowNext) { EmptyView() } // ... DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .milliseconds(2500)) { isShowNext = true } EmptyView() 는 아무것도 없는 뷰를 의미하고 isShowNext가 true가 되면 네비게이션이 실행된다 🤔 이렇게 하는게 맞는건가 라는 의문이 계속 들었다. 더 나은 방법이 생각나면 글을 수정해야겠다.
Why ? TabBar를 구현하는데 탭 이동을 하고나서 VIewModel이 초기화 되는 것 같았다. 뭐가 문제인지 알아보던 중 해결방법을 찾긴했지만 더 알아보고 정리해야 할 것 같아서 정리한다. ObservedObject ? @ObservedObject를 사용하여 ViewModel의 변화를 관찰, 반응할 수 있다. Publisher가 보내주는 신호에 따라 변경되면 View를 만료시키고 새로 그린다. 상위 State변수가 변화하면 해당 변수를 사용하고있는 하위 View들은 모두 초기화 된다. 이런 현상으로 인해 탭 이동을 하고나면 ViewModel이 초기화 되는 느낌을 받았다. 탭 이동 할 때 마다 init() 이 호출되는 것으로 보아 확실하다.. StateObject ? iOS 14부터 StateObje..

Issue ? 분명 전체 영역에다가 onTapGesture를 줬는데 간헐적으로 정상 작동했다. 될때보다 안될때가 더 많았다. 파란박스 영역은 정상 작동했지만 그 외에 빨간박스 영역은 터치가 안됐다. ⚒ Fix ! 구글링을 해보니 제스처를 사용하려면 컨텐츠가 불투명해야한다고 한다. 그래서 영역 위에 전체를 감싸는 사각형을 만들어줬다. .contentShape(Rectangle()) Reference Why doesn't SwiftUI onTapGesture always work The onTapGesture in SWiftUI doesn't work reliably. This example shows the problem, which is that sometimes when you tap on a cell..

Why ? 소셜로그인을 구현하면 애플 로그인도 있어야 스토어 심사에서 리젝당하지 않는다. SwiftUI로 애플 로그인을 구현해보지 못해서 공부해본다. How ? Capabilities 추가 Capabilities에 Sign in with Apple 추가 근데 혹시 ADP를 결제해야 사용할 수 있다는 것을 나만 몰랐나..? 돈 안내고쓰면 애플로그인도 안시켜줘… 관련 자료를 레퍼런스에 첨부해놔야겠다.. 로그인 import AuthenticationServices func loginWithApple() { let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] let co..

Why ? 요즘은 어디서나 사용하는 소셜로그인 기능 SwiftUI로는 소셜로그인을 해본적이 없어서 사용하기전에 미리 공부를 해보려고 한다. How ? 카카오 애플리케이션 등록 https://developers.kakao.com/docs/latest/ko/getting-started/app Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com info.plist 설정 LSApplicationQueriesSchemes kakaokompassauth kakaolink URL Schemes 설정 URLSchemes 에 kakao{NATIVE_APP_KEY}를..
Why ? 자주 사용하지만 프로젝트에서 한번씩만 사용해서 항상 구글링을 하길래 그냥 통으로 정리해두려고 한다. How ? // Request 코드 func requestCamera() { AVCaptureDevice.requestAccess(for: .video) { isAccess in print(isAccess ? "카메라 권한 허용" : "카메라 권한 거부") } } func requestPhoto() { PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in switch status{ case .authorized: print("Album: 권한 허용") case .denied: print("Album: 권한 거부") case .rest..
Why ? 프로젝트 본격적으로 시작 하기 전 와이어플로우를 보고 화면구조를 잡아보기로 했다. 한번 흐름을 쭉 보면서 UI나 대부분의 기능은 제외하고 훑어보는 방식으로 진행했다. 그 중에 SwiftUI는 LaunchScreen.storyboard가 없는데 어떤식으로 하면 좋을까 생각하다가 정리했다. How ? struct SplashView: View { @State private var isDone: Bool = false var body: some View { VStack { if isDone { // TODO: - Home View } else { Text("스플래시") .font(.system(size: 50)) .fontWeight(.bold) .padding() } } .onAppear { Di..

Why ? 다크모드를 지원하려면 디자인이 다크모드용으로 한 벌 더 나와야하기 때문에 힘들다.. How ? 첫 번째 방법 info.plist 파일에 “Apperance” “Light” 추가 두 번째 방법 UIUserInterfaceStyle Light info.plist 파일에 코드로 추가 세 번째 방법 // AppDelegate.swift // didFinishLaunchingWithOptions if #available(iOS 13.0, *) { self.window?.overrideUserInterfaceStyle = .light } AppDelegate.swift에서 didFinishLaunchingWithOptions 메소드 안에 코드로 추가 ✔️ 나는 SwiftUI로 진행하기 때문에 첫 번째 방..
- Total
- Today
- Yesterday
- 의미있는이름
- 곰튀김
- Git
- CodingTest
- AWS Fargate
- Xcode
- ChatGPT
- 카메라
- Protocol
- strcut
- IOS
- enumerations
- frame과 bounds 차이
- Generic
- file private
- AWS
- rxswift
- kakao
- tabview
- Swift
- Custom
- ObservedObject
- Login
- onTapGesture
- SwiftUI
- OCR
- MVVM
- navigation
- docker
- delegate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |