1
1
import UIKit
2
2
import CalendarKit
3
- import DateToolsSwift
4
3
5
- class CustomCalendarExampleController : DayViewController , DatePickerControllerDelegate {
4
+ class CustomCalendarExampleController : DayViewController {
6
5
7
6
var data = [ [ " Breakfast at Tiffany's " ,
8
7
" New York, 5th avenue " ] ,
@@ -46,73 +45,29 @@ class CustomCalendarExampleController: DayViewController, DatePickerControllerDe
46
45
UIColor . green,
47
46
UIColor . red]
48
47
49
- lazy var customCalendar : Calendar = {
50
- let customNSCalendar = NSCalendar ( identifier: NSCalendar . Identifier. gregorian) !
51
- customNSCalendar. timeZone = TimeZone ( abbreviation: " CEST " ) !
52
- let calendar = customNSCalendar as Calendar
53
- return calendar
48
+ private lazy var rangeFormatter : DateIntervalFormatter = {
49
+ let fmt = DateIntervalFormatter ( )
50
+ fmt. dateStyle = . none
51
+ fmt. timeStyle = . short
52
+
53
+ return fmt
54
54
} ( )
55
-
55
+
56
56
override func loadView( ) {
57
- calendar = customCalendar
57
+ calendar. timeZone = TimeZone ( identifier: " Europe/Paris " ) !
58
+
58
59
dayView = DayView ( calendar: calendar)
59
60
view = dayView
60
61
}
61
62
62
63
override func viewDidLoad( ) {
63
64
super. viewDidLoad ( )
64
65
title = " CalendarKit Demo "
65
- navigationItem. leftBarButtonItem = UIBarButtonItem ( title: " Change Date " ,
66
- style: . plain,
67
- target: self ,
68
- action: #selector( ExampleController . presentDatePicker) )
69
66
navigationController? . navigationBar. isTranslucent = false
70
67
dayView. autoScrollToFirstEvent = true
71
68
reloadData ( )
72
69
}
73
70
74
- @objc func presentDatePicker( ) {
75
- let picker = DatePickerController ( )
76
- // let calendar = dayView.calendar
77
- // picker.calendar = calendar
78
- // picker.date = dayView.state!.selectedDate
79
- picker. datePicker. timeZone = TimeZone ( secondsFromGMT: 0 ) !
80
- picker. delegate = self
81
- let navC = UINavigationController ( rootViewController: picker)
82
- navigationController? . present ( navC, animated: true , completion: nil )
83
- }
84
-
85
- func datePicker( controller: DatePickerController , didSelect date: Date ? ) {
86
- if let date = date {
87
- var utcCalendar = Calendar ( identifier: . gregorian)
88
- utcCalendar. timeZone = TimeZone ( secondsFromGMT: 0 ) !
89
-
90
- let offsetDate = dateOnly ( date: date, calendar: dayView. calendar)
91
-
92
- print ( offsetDate)
93
- dayView. state? . move ( to: offsetDate)
94
- }
95
- controller. dismiss ( animated: true , completion: nil )
96
- }
97
-
98
- func dateOnly( date: Date , calendar: Calendar ) -> Date {
99
- let yearComponent = calendar. component ( . year, from: date)
100
- let monthComponent = calendar. component ( . month, from: date)
101
- let dayComponent = calendar. component ( . day, from: date)
102
- let zone = calendar. timeZone
103
-
104
- let newComponents = DateComponents ( timeZone: zone,
105
- year: yearComponent,
106
- month: monthComponent,
107
- day: dayComponent)
108
- let returnValue = calendar. date ( from: newComponents)
109
-
110
- // let returnValue = calendar.date(bySettingHour: 0, minute: 0, second: 0, of: date)
111
-
112
-
113
- return returnValue!
114
- }
115
-
116
71
// MARK: EventDataSource
117
72
118
73
override func eventsForDate( _ date: Date ) -> [ EventDescriptor ] {
@@ -124,24 +79,22 @@ class CustomCalendarExampleController: DayViewController, DatePickerControllerDe
124
79
}
125
80
126
81
private func generateEventsForDate( _ date: Date ) -> [ EventDescriptor ] {
127
- var workingDate = date . add ( TimeChunk . dateComponents ( hours : Int ( arc4random_uniform ( 10 ) + 5 ) ) )
82
+ var workingDate = Calendar . current . date ( byAdding : . hour , value : Int . random ( in : 1 ... 15 ) , to : date ) !
128
83
var events = [ Event] ( )
129
84
130
85
for i in 0 ... 4 {
131
86
let event = Event ( )
132
- let duration = Int ( arc4random_uniform ( 160 ) + 60 )
133
- let datePeriod = TimePeriod ( beginning: workingDate,
134
- chunk: TimeChunk . dateComponents ( minutes: duration) )
135
-
136
- event. startDate = datePeriod. beginning!
137
- event. endDate = datePeriod. end!
138
-
87
+
88
+ let duration = Int . random ( in: 60 ... 160 )
89
+ event. startDate = workingDate
90
+ event. endDate = Calendar . current. date ( byAdding: . minute, value: duration, to: workingDate) !
91
+
139
92
var info = data [ Int ( arc4random_uniform ( UInt32 ( data. count) ) ) ]
140
93
141
94
let timezone = dayView. calendar. timeZone
142
95
print ( timezone)
143
- info . append ( datePeriod . beginning! . format ( with : " dd.MM.YYYY " , timeZone : timezone ) )
144
- info. append ( " \( datePeriod . beginning! . format ( with : " HH:mm " , timeZone : timezone ) ) - \( datePeriod . end! . format ( with : " HH:mm " , timeZone : timezone ) ) " )
96
+
97
+ info. append ( rangeFormatter . string ( from : event . startDate , to : event . endDate ) )
145
98
event. text = info. reduce ( " " , { $0 + $1 + " \n " } )
146
99
event. color = colors [ Int ( arc4random_uniform ( UInt32 ( colors. count) ) ) ]
147
100
event. isAllDay = Int ( arc4random_uniform ( 2 ) ) % 2 == 0
@@ -157,8 +110,8 @@ class CustomCalendarExampleController: DayViewController, DatePickerControllerDe
157
110
158
111
events. append ( event)
159
112
160
- let nextOffset = Int ( arc4random_uniform ( 250 ) + 40 )
161
- workingDate = workingDate . add ( TimeChunk . dateComponents ( minutes : nextOffset) )
113
+ let nextOffset = Int . random ( in : 40 ... 250 )
114
+ workingDate = Calendar . current . date ( byAdding : . minute , value : nextOffset, to : workingDate ) !
162
115
event. userInfo = String ( i)
163
116
}
164
117
@@ -222,17 +175,15 @@ class CustomCalendarExampleController: DayViewController, DatePickerControllerDe
222
175
223
176
private func generateEventNearDate( _ date: Date ) -> EventDescriptor {
224
177
let duration = Int ( arc4random_uniform ( 160 ) + 60 )
225
- let startDate = date . subtract ( TimeChunk . dateComponents ( minutes : Int ( CGFloat ( duration) / 2 ) ) )
178
+ let startDate = Calendar . current . date ( byAdding : . minute , value : - Int( CGFloat ( duration) / 2 ) , to : date ) !
226
179
let event = Event ( )
227
- let datePeriod = TimePeriod ( beginning: startDate,
228
- chunk: TimeChunk . dateComponents ( minutes: duration) )
229
- event. startDate = datePeriod. beginning!
230
- event. endDate = datePeriod. end!
180
+
181
+ event. startDate = startDate
182
+ event. endDate = Calendar . current. date ( byAdding: . minute, value: duration, to: startDate) !
231
183
232
184
var info = data [ Int ( arc4random_uniform ( UInt32 ( data. count) ) ) ]
233
- let timezone = dayView. calendar. timeZone
234
- info. append ( datePeriod. beginning!. format ( with: " dd.MM.YYYY " , timeZone: timezone) )
235
- info. append ( " \( datePeriod. beginning!. format ( with: " HH:mm " , timeZone: timezone) ) - \( datePeriod. end!. format ( with: " HH:mm " , timeZone: timezone) ) " )
185
+
186
+ info. append ( rangeFormatter. string ( from: event. startDate, to: event. endDate) )
236
187
event. text = info. reduce ( " " , { $0 + $1 + " \n " } )
237
188
event. color = colors [ Int ( arc4random_uniform ( UInt32 ( colors. count) ) ) ]
238
189
event. editedEvent = event
0 commit comments