https://developer.apple.com/documentation/uikit/uicalendarview
UICalendarView | Apple Developer Documentation
A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.
developer.apple.com
📌 설정 및 사용법
CalenadarViewController 클래스는 iOS 16 이상에서 제공하는 UICalendarView를 사용하여 캘린더를 표시하는 기능을 합니다.
class CalenadarViewController: UIViewController {
private let calendarView: UICalendarView = UICalendarView()
// MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
print("지금 시간: ", Date())
view.backgroundColor = .white
let gregorianCalendar = Calendar(identifier: .gregorian)
calendarView.calendar = gregorianCalendar
calendarView.locale = Locale(identifier: "ko_KR")
calendarView.fontDesign = .rounded
let today = Date()
let todayComponents = gregorianCalendar.dateComponents([.year, .month, .day], from: today)
// timeZone을 설정하는 경우
//todayComponents.timeZone = TimeZone(identifier: "Asia/Seoul")
// calendarView.visibleDateComponents = DateComponents(
// calendar: gregorianCalendar,
// timeZone: NSTimeZone(name: "Ko_KR") as TimeZone?,
// year: 2025,
// month: 3,
// day: 13
// )
calendarView.visibleDateComponents = todayComponents
setupUI()
}
private func setupUI() {
view.addSubview(calendarView)
calendarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
calendarView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
calendarView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10),
calendarView.topAnchor.constraint(equalTo: view.topAnchor),
calendarView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -150)
])
}
}
✅ 오늘 날짜 가져오기 및 DateComponents로 변환
let today = Date()
let todayComponents = gregorianCalendar.dateComponents([.year, .month, .day], from: today)
- Date()를 사용하여 현재 날짜를 가져옴
- Calendar의 dateComponents([.year, .month, .day], from: today)를 사용하여 연, 월, 일만 가져오도록 설정
❗ timeZone을 설정해야 하는 경우
- 특정한 시간대에서 항상 동일한 날짜를 유지해야 할 경우
- Calendar의 timeZone이 기본 시스템 시간대가 아닌 특정 시간대로 동작해야 할 경우
let gregorianCalendar = Calendar(identifier: .gregorian)
var todayComponents = gregorianCalendar.dateComponents([.year, .month, .day], from: Date())
// ✅ 한국(KST) 시간대로 설정
todayComponents.timeZone = TimeZone(identifier: "Asia/Seoul")
calendarView.visibleDateComponents = todayComponents
- timeZone을 설정하지 않아도 기본적으로 시스템 시간대(TimeZone.current)를 따라가기 때문에 정상적으로 동작
- 특정한 시간대로 고정하고 싶다면 timeZone = TimeZone(identifier: "Asia/Seoul")을 추가하면 됨
'UIKIT > UICalendar' 카테고리의 다른 글
❌ 복수 선택할 수 있지만.. 해제는 자동으로 안되요 (0) | 2025.03.17 |
---|---|
🤔 CalendarViewDeleage를 사용하여 특정 날짜에 대한 데코레이션! (0) | 2025.03.14 |