Vodolazkyi / VACalendar

Custom Calendar for iOS in Swift
MIT License
198 stars 68 forks source link
calendar calendar-component calendarview ios swift ui-components

Screenshots

About Swift 4.2

The calendar with support for:

Example project

Take a look at the example project over here

Usage

In order to create calendar with horizontal scroll direction:

  1. Create storyboard with 2 UIViews
  2. Make the first one subclass of VAMonthHeaderView, it will represent the name of the month and the control buttons to switch between months

  1. Make the second view subclass of VAWeekDaysView, this view will display weekdays names

  1. I recommend that you specify your own calendar with the settings firstWeekday andtimeZone to correctly display dates
let defaultCalendar: Calendar = {
    var calendar = Calendar.current
    calendar.firstWeekday = 1
    calendar.timeZone = TimeZone(secondsFromGMT: 0)!
    return calendar
}()
  1. Configure appearance of VAMonthHeaderView and VAWeekDaysView
    @IBOutlet weak var monthHeaderView: VAMonthHeaderView! {
        didSet {
            let appereance = VAMonthHeaderViewAppearance(
                previousButtonImage: #imageLiteral(resourceName: "previous"),
                nextButtonImage: #imageLiteral(resourceName: "next"),
                dateFormat: "LLLL"
            )
            monthHeaderView.delegate = self
            monthHeaderView.appearance = appereance
        }
    }

    @IBOutlet weak var weekDaysView: VAWeekDaysView! {
        didSet {
            let appereance = VAWeekDaysViewAppearance(symbolsType: .veryShort, calendar: defaultCalendar)
            weekDaysView.appearance = appereance
        }
    }
  1. Setup VACalendarView
    var calendarView: VACalendarView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let calendar = VACalendar(calendar: defaultCalendar)
        calendarView = VACalendarView(frame: .zero, calendar: calendar)
        calendarView.showDaysOut = true
        calendarView.selectionStyle = .multi
        calendarView.monthDelegate = monthHeaderView
        calendarView.dayViewAppearanceDelegate = self
        calendarView.monthViewAppearanceDelegate = self
        calendarView.calendarDelegate = self
        calendarView.scrollDirection = .horizontal
        view.addSubview(calendarView)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        if calendarView.frame == .zero {
            calendarView.frame = CGRect(
                x: 0,
                y: weekDaysView.frame.maxY,
                width: view.frame.width,
                height: view.frame.height * 0.6
            )
            calendarView.setup()
        }
    }

Release Notes

Version 1.0

Version 1.3

Requirements

Installation

CocoaPods

use_frameworks!

pod 'VACalendar'

License

VACalendar is released under an MIT License. See LICENSE for details.