CVCalendar 1.7.0

CVCalendar 1.7.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
Released最后一次发布2020年3月
SPM支持 SPM

Eugene MozharovskyJonas-Taha El Sesiy 维护。




  • Eugene Mozharovsky 和 Jonas-Taha El Sesiy

pod License Build Status Twitter

概览

屏幕截图

GIF 演示

安装

CocoaPods

pod 'CVCalendar', '~> 1.6.2'

用法

使用CVCalendar并不困难。有几种方法来实现它:

  • 故事板设置
  • 手动设置

那么,让我们开始吧。

注意!从1.1.1版本开始,CVCalendar需要实现两个协议CVCalendarViewDelegateCVCalendarMenuViewDelegate,请实现两个都。请注意,它们都有一个相同签名的函数,这意味着你只需要实现一次。有关更多信息,请查看示例项目

故事板设置

基本设置。

首先,您必须通过CocoaPodsCVCalendar集成到您的项目中。

现在,您需要像下面的图片所示,将2个UIView添加到您的Storyboard中。
alt tag

别忘了在代码中添加2个出口。

    @IBOutlet weak var menuView: CVCalendarMenuView!
    @IBOutlet weak var calendarView: CVCalendarView!

这两个视图最终表示MenuView和CalendarView,因此它们应该有对应的类。要更改它们的类,请转到身份检查器并设置自定义类。完成后,您将在坞面板中看到类似下面的内容。(蓝色UIView -> CVCalendarView,绿色UIView -> CVCalendarMenuView)

alt tag

注意:请注意,CalendarView和MenuView都会根据它们自己的来计算内容的边框。因此,在您的项目中,您可能需要编辑Storyboard中初始UIView的大小,以达到最佳的内容大小。

重要提示。
在我们设置用于定制的代理之前,你应该知道CalendarView的初始化分为两个部分:* On Init. * On Layout。

正如大多数开发者在开始初始化时使用AutoLayout功能,UIView的大小不一定与出现时的视图大小一致。因此,我们有两种选择:在UIView出现时初始化ContentView和MonthView以及所有适当的组件,或者在UIView初始化时初始化这些组件,然后简单地更新框架。第一种方法不适用,因为会有闪动效果(初始化将在你的UIView出现后完成),这是CVCalendar有两部分创建造成的。

由于CVCalendarView和CVCalendarMenuView将被自动创建,你只需要做以下操作(在包含CVCalendar的ViewController中)。

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        menuView.commitMenuViewUpdate()
        calendarView.commitCalendarViewUpdate()
    }

代理设置(定制)。

CVCalendar需要实现两个协议。它们是CVCalendarViewDelegateCVCalendarMenuViewDelegate。请注意,后者的方法名与前者声明的方法完全相同,这意味着你只需要在CVCalendarViewDelegate中实现所需的方法,并将你的控制器设置为实现了这两个协议的代理。

这些协议表示获取构建CVCalendarView和CVCalendarMenuView所需的数据。因此,不要忘记实现它们。

API页面

简而言之,可定制的属性

  • 显示工作日
  • 在突出显示时移动点标记
  • 在特定日期视图中显示点标记
  • 点标记的颜色、偏移量和大小
  • 周视图和日视图之间的空间
  • 日视图的标签属性(颜色、背景、透明度+不同状态(正常/突出显示))

行为

  • 日视图选择
  • 展示日期更新
  • 在(取消)选择日视图时的动画

最后我们将自定义属性。为了使这成为可能,你必须实现适当的协议。(你可以在架构部分中查看展示的协议和简短描述)。打开你的Storyboard,右键单击CVCalendarView,你将看到一个带有出口的窗口,这里有一些我们实际上需要的。查看图片以确保你做的一切都正确。

alt tag

现在,根据你想要更改的内容,你应该实现一个特定的协议,提供自定义这些内容的所需方法。有关代理的API描述,请参阅[此页面](https://github.com/CVCalendar/CVCalendar/wiki)。

如果你实现协议,请务必将特定的出口连接到你的ViewController。

注意:CVCalendar为所有可定制属性(即定义在展示的协议中)定义了默认值。到目前为止,如果你没有实现自己的协议,日历将按照最初的设计运行。

手动设置

如果你出于某种原因想要手动设置CVCalendar,你必须执行以下步骤。

使用 initinit:frame 方法初始化 CVCalendarView。建议在 viewDidLoad 方法中完成初始化。不要在 viewDidAppear:viewWillAppear: 方法中进行初始化!然后设置委托以自定义选项。

请注意,应先设置 CVCalendarAppearanceDelegate,然后设置 CVCalendarViewDelegate,以确保您的更改能够应用。

对于 CVCalendarMenuView,您可以像初始化 CVCalendarView 一样初始化它,并且需要实现 CVCalendarMenuViewDelegate 协议。

它看起来应该是这样的。

    override func viewDidLoad() {
        super.viewDidLoad()

        // CVCalendarMenuView initialization with frame
        self.menuView = CVCalendarMenuView(frame: CGRectMake(0, 0, 300, 15))

        // CVCalendarView initialization with frame
        self.calendarView = CVCalendarView(frame: CGRectMake(0, 20, 300, 450))

        // Appearance delegate [Unnecessary]
        self.calendarView.calendarAppearanceDelegate = self

        // Animator delegate [Unnecessary]
        self.calendarView.animatorDelegate = self

        // Menu delegate [Required]
        self.menuView.menuViewDelegate = self

        // Calendar delegate [Required]
        self.calendarView.calendarDelegate = self
    }

不要忘记在 viewDidLayoutSubviews 方法上提交更新。

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        // Commit frames' updates
        self.menuView.commitMenuViewUpdate()
        self.calendarView.commitCalendarViewUpdate()
    }

就这样。

架构

版本矩阵

虽然 CVCalendar 采用最新的 Swift 语言语法,但修订版本如下所示:

CVCalendar Swift Xcode 发布说明
1.6 4.x 8.x, 9.x, 10.x HEAD
1.5 3.x 8.x, 9.x swift3-branch
1.4 3.x 7.x, 8.0 不受支持
1.3 2.x 7.x 不受支持
1.2 1.x 7.x 不受支持

高级 API

面向贡献者

如果您有任何评论,请随时打开一个问题或提交 PR。请确保在执行此操作时遵守提供的 issue 模板。此外,请注意,演示项目旨在测试 CVCalendar 的更改。如果您已提交,请不要忘记检查是否一切正常且按预期工作,并相应地更新文档。谢谢👍