*이 글에서 사용한 개발환경은 iOS 16.0 타겟, Xcode 15.0.1, 시뮬레이터 iPhone 15 Pro (iOS 17.0) 입니다
import SwiftUI
import UIKit
import HorizonCalendar
struct HorizonCalendarView: UIViewRepresentable {
typealias UIViewType = CalendarView
private let initialContent: CalendarViewContent
init(initialContent: CalendarViewContent) {
self.initialContent = initialContent
}
func makeUIView(context: Context) -> HorizonCalendar.CalendarView {
return CalendarView(initialContent: initialContent)
}
func updateUIView(_ uiView: HorizonCalendar.CalendarView, context: Context) {
// 현재로서는 따로 필요하지 않아서 구현하지 않았음
}
}
import SwiftUI
import HorizonCalendar
struct TestView: View {
var body: some View {
HorizonCalendarView(initialContent: makeContent())
}
func makeContent() -> CalendarViewContent {
let startDate = Calendar.current.date(byAdding: .year, value: -2, to: Date())!
let endDate = Calendar.current.date(byAdding: .year, value: 2, to: Date())!
return CalendarViewContent(
calendar: Calendar.current,
visibleDateRange: startDate...endDate, // 캘린더에 보여줄 날짜 범위
monthsLayout: .horizontal(options: .init()) // 또는 .vertical사용 가능
)
}
}
#Preview {
TestView()
}
.~ItemProvider는 아래와 같은 종류가 있음
ItemProvider의 클로저에 SwiftUI의 View를 return하면 되는데, 마지막에 꼭 calendarItemModel을 붙어주자!
func makeContent() -> CalendarViewContent {
let startDate = Calendar.current.date(byAdding: .year, value: -2, to: Date())!
let endDate = Calendar.current.date(byAdding: .year, value: 2, to: Date())!
return CalendarViewContent(
calendar: Calendar.current,
visibleDateRange: startDate...endDate,
monthsLayout: .horizontal(options: .init())
)
.dayItemProvider { day in
Text("\(day.day)")
.font(.system(size: 18))
.foregroundColor(Color(UIColor.green))
.calendarItemModel // 끝에 붙여주기
}
.monthHeaderItemProvider { month in
Text("\(month.month)월")
.padding()
.background(.blue)
.calendarItemModel // 끝에 붙여주기
}
}
위 코드 실행사진
여기까지가 기본적인 뷰 생성, 추가 방법이다.