본문 바로가기

SwiftUI

[SwiftUI] Custom Calendar 기능 만들어보기 - 1 안녕하세요. 오늘은 간단한 캘린더 기능을 만들어보겠습니다. 구현하려는 기능의 요구사항은 다음과 같습니다. 년도, 월, 일을 달력 형태로 표시. 앞, 뒤 버튼을 통해 월을 변경 일정 정보를 달력에 표시 (노션처럼) 달력과 일정을 표시하기 전에, 먼저 필요한 코드를 작성하겠습니다. import SwiftUI /** 날짜 칸 표시를 위한 일자 정보 */ struct DateValue: Identifiable { var id = UUID().uuidString var day: Int var date: Date var isNotCurrentMonth: Bool = false } /** 일정 정보 */ struct Schedule: Decodable { var name: String var startDate: Da.. 더보기
[SwiftUI] UIImagePickerController를 이용한 카메라 사용 안녕하세요. 이번에는 SwiftUI에서 카메라를 사용하는 방법을 다뤄보겠습니다. 먼저 카메라를 사용하기 위해서는 사용자가 카메라 사용 권한을 허용해야합니다. //권한 여부 확인 let status = AVCaptureDevice.authorizationStatus(for: .video) if status == .authorized { //TODO: 카메라 접근 권한이 이미 허용 상태인 경우 } else if status == .notDetermined { AVCaptureDevice.requestAccess(for: .video) { accessGranted in DispatchQueue.main.async { if accessGranted { //TODO: 지금 카메라 접근 권한을 허용한 경우 } el.. 더보기
[SwiftUI] "손쉬운 사용" 버튼 스타일 iOS 설정의 “손쉬운 사용 → 버튼 사용”을 설정했을 때, SwiftUI 의 기본 버튼 스타일을 사용하면 회색 배경이 생기는 문제가 발생합니다. "손쉬운 사용" 설정을 해도 기본 버튼 스타일이 그대로 있길 원한다면 아래처럼 커스텀 버튼 스타일을 지정해주어야 합니다. struct BasicButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .opacity(configuartion.isPressed ? 0.3 : 1) .animation(configuartion.isPressed ? .none : .easeInOut(duration: 0.15), value: config.. 더보기
[SwiftUI] NavigationLink 버그 SwiftUI 프로젝트를 개발할 때, NavigationView와 NavigationLink를 사용하여 화면 이동을 구현하곤 합니다. 문제는 화면이동 직후 다시 뒤로 돌아와버리는 버그가 발생하는 경우가 있다는 것입니다. 구글링도 해보고 이것저것 시도하면서 해결했던 방법들을 정리해보겠습니다. 1. 대부분의 경우 NavigationView에 .navigationViewStyle(.stack)을 설정해주면 해결됩니다. NavigationView { ... }.navigationViewStyle(.stack) //.navigationViewStyle(StackNavigationViewStyle()) 2. View에 NavigationLink가 하나만 있는 경우에도 종종 버그가 발생합니다. 이 때는 EmptyVi.. 더보기
[SwiftUI] Naver Map에 Custom Marker 띄우기 이번에는 SwiftUI Naver Map에 Custom Marker를 표시해주는 작업까지 해보겠습니다. 이를 구현하기 위해서 아래 순서대로 진행해보겠습니다. UIViewRepresentable을 이용하여 Naver Map 표시 Custom Marker로 사용할 SwiftUI View 작업 작업한 SwiftUI View를 UIView로 변환 변환한 UIVIew를 캡쳐하여 UIImage 생성 해당 UIImage를 Marker 이미지로 지정 SwiftUI에서 Naver Map을 사용하려면 UIViewRepresentable을 이용해야 합니다. 이 내용은 지난 포스팅에서 다루었으니, 여기를 참고해주세요! -> https://k00kie-dev.tistory.com/5 [SwiftUI] SwiftUI로 Naver.. 더보기
[SwiftUI] Custom Navigation Bar의 Back Swipe 액션 활성화하기 SwiftUI의 NavigationView를 사용하면 NavigationBar가 자동으로 생성됩니다. 그러나 기본 NavigationBar는 커스텀이 까다로운 부분이 있어서 종종 커스텀 바를 구현하곤 합니다. 기본 NavigationBar를 hidden시키고 커스텀 바를 구현하여 화면의 맨 위에 배치하는 것은 문제가 없지만, 이렇게 구현하는 경우에는 Back Swipe시 이전화면으로 돌아가는 액션도 같이 비활성화가 됩니다. extension UINavigationController: ObservableObject, UIGestureRecognizerDelegate { open override func viewDidLoad() { super.viewDidLoad() interactivePopGestureR.. 더보기
[SwiftUI] Menu 관련 버그 한 화면에 Menu와 Modal View(.fullScreenCover, .sheet 등)를 같이 사용하는 경우, 해당 Modal View가 dismiss 되었을 때 Menu를 두번 탭해야 정상 작동하는 버그가 있습니다. 예제를 한번 볼까요? VStack { Menu { Button { selectedMenu = 1 } label: { Text("메뉴 1") } Button { selectedMenu = 2 } label: { Text("메뉴 2") } } label: { Text("메뉴 버튼입니다") } Text("테스트 화면입니다") .onTagGesture { showModal = true } } .sheet(isPresented: $showModal, onDismiss: nil) { ModalVi.. 더보기
[SwiftUI] SwiftUI로 Naver Map iOS SDK 연동하기 이번에는 SwiftUI로 Naver Map iOS SDK를 연동해서 지도를 띄워보겠습니다. 2022.02.11 기준 Naver Map 최신 버전은 UIKit으로 구현이 가능합니다. 즉, UIView로 구현된 지도를 SwiftUI View로 사용하려면 UIViewRepresentable을 사용해야합니다. UIViewRepresentable에 대한 포스팅은 여기를 확인해주세요! http://.https://k00kie-dev.tistory.com/1 import Foundation import SwiftUI import NMapsMap import CoreLocation struct MapView: UIViewRepresentable { @Binding var selectedLocation: NMGLatLn.. 더보기