You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Initialize the Gregorian calendar and date formatter
let gregorian = Calendar(identifier: .gregorian)
let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
private func configureVisibleCells() {
self.calendarFS.visibleCells().forEach { (cell) in
let date = self.calendarFS.date(for: cell)
let position = self.calendarFS.monthPosition(for: cell)
self.configureCell(cell, for: date, at: position)
}
}
func configureCell(_ cell: FSCalendarCell?, for date: Date?, at position: FSCalendarMonthPosition) {
let rangeCell = cell as? DIYCalendarCell
if position != FSCalendarMonthPosition.current {
rangeCell?.middleLayer.isHidden = true
rangeCell?.selectionLayer.isHidden = true
return
}
if (date1 != nil) && (date2 != nil) {
// The date is in the middle of the range
let isMiddle: Bool = date?.compare(date1!) != date?.compare(date2!)
rangeCell?.middleLayer.isHidden = !isMiddle
}
else {
rangeCell?.middleLayer.isHidden = true
}
import FSCalendar
class TransitsCalenderVC: UIViewController, FSCalendarDelegate, FSCalendarDataSource, FSCalendarDelegateAppearance {
@IBOutlet weak var calendarFS: FSCalendar!
var date1: Date?
var date2: Date?
// Initialize the Gregorian calendar and date formatter
let gregorian = Calendar(identifier: .gregorian)
let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
override func viewDidLoad() {
super.viewDidLoad()
calendarFS.delegate = self
calendarFS.dataSource = self
calendarFS.allowsMultipleSelection = true
calendarFS.scrollDirection = .vertical
calendarFS.scope = .month
// Register and set custom cell class
calendarFS.register(DIYCalendarCell.self, forCellReuseIdentifier: "cell")
}
// MARK: - FSCalendar Delegate and DataSource
func calendarCurrentPageDidChange(_ calendar: FSCalendar) {
}
func calendar(_ calendar: FSCalendar, cellFor date: Date, at position: FSCalendarMonthPosition) -> FSCalendarCell {
let cell = calendar.dequeueReusableCell(withIdentifier: "cell", for: date, at: position)
return cell
}
func calendar(_ calendar: FSCalendar, willDisplay cell: FSCalendarCell, for date: Date, at position: FSCalendarMonthPosition) {
self.configureCell(cell, for: date, at: position)
}
func calendar(_ calendar: FSCalendar, shouldSelect date: Date, at monthPosition: FSCalendarMonthPosition) -> Bool {
return monthPosition == FSCalendarMonthPosition.current
}
func calendar(_ calendar: FSCalendar, shouldDeselect date: Date, at monthPosition: FSCalendarMonthPosition) -> Bool {
return false
}
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
if calendar.swipeToChooseGesture.state == .changed {
// If the selection is caused by swipe gestures
if !(date1 != nil) {
date1 = date
}
else {
if (date2 != nil) {
calendar.deselect(date2!)
}
date2 = date
}
}
else {
if (date2 != nil) {
calendar.deselect(date1!)
calendar.deselect(date2!)
date1 = date
date2 = nil
}
else if !(date1 != nil) {
date1 = date
}
else {
date2 = date
}
}
configureVisibleCells()
}
func calendar(_ calendar: FSCalendar, didDeselect date: Date) {
print("did deselect date (self.formatter.string(from: date))")
configureVisibleCells()
}
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {
if self.gregorian.isDateInToday(date) {
return [UIColor.orange]
}
return [appearance.eventDefaultColor]
}
private func configureVisibleCells() {
self.calendarFS.visibleCells().forEach { (cell) in
let date = self.calendarFS.date(for: cell)
let position = self.calendarFS.monthPosition(for: cell)
self.configureCell(cell, for: date, at: position)
}
}
func configureCell(_ cell: FSCalendarCell?, for date: Date?, at position: FSCalendarMonthPosition) {
let rangeCell = cell as? DIYCalendarCell
if position != FSCalendarMonthPosition.current {
rangeCell?.middleLayer.isHidden = true
rangeCell?.selectionLayer.isHidden = true
return
}
if (date1 != nil) && (date2 != nil) {
// The date is in the middle of the range
let isMiddle: Bool = date?.compare(date1!) != date?.compare(date2!)
rangeCell?.middleLayer.isHidden = !isMiddle
}
else {
rangeCell?.middleLayer.isHidden = true
}
}
}
// DIY Calendar Cell ========>
enum SelectionType: Int {
case none
case single
case leftBorder
case middle
case rightBorder
}
class DIYCalendarCell: FSCalendarCell {
weak var selectionLayer: CAShapeLayer!
weak var middleLayer: CAShapeLayer!
var selectionType: SelectionType = .none {
didSet {
setNeedsLayout()
}
}
required init!(coder aDecoder: NSCoder!) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
let selectionLayer = CAShapeLayer()
selectionLayer.fillColor = UIColor.green.withAlphaComponent(0.5).cgColor
selectionLayer.actions = ["hidden": NSNull()]
self.contentView.layer.insertSublayer(selectionLayer, below: self.titleLabel!.layer)
self.selectionLayer = selectionLayer
let middleLayer = CAShapeLayer()
middleLayer.fillColor = UIColor.blue.withAlphaComponent(0.3).cgColor
self.contentView.layer.insertSublayer(middleLayer, below: selectionLayer)
self.middleLayer = middleLayer
}
override func layoutSubviews() {
super.layoutSubviews()
self.selectionLayer.frame = self.contentView.bounds.insetBy(dx: 5, dy: 5)
self.middleLayer.frame = self.contentView.bounds.insetBy(dx: 5, dy: 5)
let cornerRadius = self.selectionLayer.frame.height / 2
switch selectionType {
case .middle:
self.middleLayer.isHidden = false
self.selectionLayer.isHidden = true
self.middleLayer.path = UIBezierPath(rect: self.middleLayer.bounds).cgPath
case .leftBorder:
self.middleLayer.isHidden = true
self.selectionLayer.isHidden = false
self.selectionLayer.path = UIBezierPath(roundedRect: self.selectionLayer.bounds,
byRoundingCorners: [.topLeft, .bottomLeft],
cornerRadii: CGSize(width: cornerRadius, height: cornerRadius)).cgPath
case .rightBorder:
self.middleLayer.isHidden = true
self.selectionLayer.isHidden = false
self.selectionLayer.path = UIBezierPath(roundedRect: self.selectionLayer.bounds,
byRoundingCorners: [.topRight, .bottomRight],
cornerRadii: CGSize(width: cornerRadius, height: cornerRadius)).cgPath
case .single:
self.middleLayer.isHidden = true
self.selectionLayer.isHidden = false
self.selectionLayer.path = UIBezierPath(ovalIn: self.selectionLayer.bounds).cgPath
case .none:
self.middleLayer.isHidden = true
self.selectionLayer.isHidden = true
}
}
}
This code date range is not working.
The text was updated successfully, but these errors were encountered: