RVCalendarWeekView 0.5.3

RVCalendarWeekView 0.5.3

测试测试通过
语言语言 Obj-CObjective C
许可协议 MIT
发布时间最新发布2016年11月

Jordi Puigdellivol 维护。



 
依赖项
Collection>= 0
EasyDate~> 0.9
UIColor-HexString>= 0
Masonry>= 0
 

  • Jordi Puigdellívol

简洁而强大的 iOS 星期日历视图,具有可拖动事件、无限滚动和捏合小时大小的功能

基于 MSCollectionView 的作品

我为简化其使用并添加一些有趣的特性创建了此库

安装

pod RVCalendarWeekView

或者目前可以复制 lib 文件夹中的文件

使用

现在您可以使用 storyboard 创建一个扩展 MSWeekView 的简单 UIView,然后只需这样做

    -(void)viewDidLoad{
        MSEvent* event1 = [MSEvent make:NSDate.now
        title:@"Title"
        location:@"Central perk"];

        MSEvent* event2 = [MSEvent make:[NSDate.now addMinutes:10]  //AddMinutes comes from EasyDate pod
        duration:60*3
        title:@"Title 2"
        location:@"Central perk"];

        _weekView.events = @[event1,event2];        
    }

简单吗?

特性

要为周视图添加特性,我在使用装饰者模式,这样我们可以在不进行多重继承的情况下扩展 weekView 并拥有更多表达式化的模块化设计。然而,这也需要有一个 strong 引用到装饰者,它将持有这些特性。

因此,我们可以使用以下代码向 weekView 添加特性

    self.decoratedWeekView = [MSWeekViewDecoratorFactory make:self.weekView
                                                     features:(MSDragableEventFeature|MSNewEventFeature|MSInfiniteFeature|MSChangeDurationFeature)
                                                  andDelegate:self];

这是一个快速的方式,其中委托应包含每个特性委托的所有方法(见下文)。

另一种方式类似于标准的装饰者模式,如果您需要更多的灵活性。

    MSWeekView* decoratedView = baseView;
    decoratedView = [MSWeekViewDecoratorInfinite makeWith:decoratedView andDelegate:infiniteDelegate];
    decoratedView = [MSWeekViewDecoratorNewEvent makeWith:decoratedView andDelegate:newEventDelegate];
    decoratedView = [MSWeekViewDecoratorDragable makeWith:decoratedView andDelegate:dragableDelegate];
    decoratedView = [MSWeekViewDecoratorChangeDuration makeWith:decoratedView andDelegate:durationDelegate];

有一个函数可以轻松地设置所有装饰器的分钟精度,如果您需要不同于默认 5 分钟的其他选项。

    [MSWeekViewDecoratorFactory setMinutesPrecisionToAllDecorators:decoratedView minutesPrecision:15];

拖动和放置

您可以使用 MSDragableEventFeature 获取更改事件持续时间的特性

它将在您的 dragDelegate 上触发以下功能

    -(BOOL)weekView:(MSWeekView*)weekView canMoveEvent:(MSEvent*)event to:(NSDate*)date;

    -(void)weekView:(MSWeekView*)weekView event:(MSEvent*)event moved:(NSDate*)date;

更改持续时间

您可以使用 MSChangeDurationFeature 获取更改事件持续时间的特性

    -(BOOL)weekView:(MSWeekView*)weekView canChangeDuration:(MSEvent*)event startDate:(NSDate*)startDate endDate:(NSDate*)endDate;

    -(void)weekView:(MSWeekView*)weekView event:(MSEvent*)event durationChanged:(NSDate*)startDate endDate:(NSDate*)endDate;

长按创建新事件

它将在您的 createEventDelegate 上触发以下功能

    -(void)weekView:(MSWeekView*)weekView onLongPressAt:(NSDate*)date

无限滚动

它将在您的 infiniteDelegate 上触发以下功能

    -(BOOL)weekView:(MSWeekView*)weekView newDaysLoaded:(NSDate*)startDate to:(NSDate*)endDate;

不可用时间

标准的 `weekView` 默认提供了一个可选的委托函数来显示灰色不可用时间(当然是可以自定义的类)

只需像这样操作即可

//This one is optional
    -(NSArray*)weekView:(id)sender unavailableHoursPeriods:(NSDate*)date{
        if(!unavailableHours){
            unavailableHours = @[
                [MSHourPerdiod make:@"00:00" end:@"09:00"],
                [MSHourPerdiod make:@"18:30" end:@"21:00"],
            ];
        }
        return unavailableHours;
    }

可捏合

目前这还没有很好地工作
您只需在 [MSWeekViewDecoratorFactory make:...] 中添加 MSPinchableFeature

选项

您甚至可以自定义一些选项(它们都有默认值,因此如果您想以不同的方式工作,只需修改它们即可)

_weekView.weekFlowLayout.show24Hours    = YES; //Show All hours or just the min to cover all events
_weekView.weekFlowLayout.hourHeight     = 50;  //Define the hour height
_weekView.daysToShowOnScreen            = 7;   //How many days visible at the same time
_weekView.daysToShow                    = 31;  //How many days to display (Ininite scroll feature pending)
_weekView.weekFlowLayout.hourGridDivisionValue  = MSHourGridDivision_15_Minutes; // Show hour division lines (at lower alpha) each X minutes, by default its NONE so they are not shown.

full demo

iPhone

这是一个如何自定义的复杂示例。

  • 在这个例子中,我们只展示一天,每个员工作为一个工作者。
  • 含有图案背景的不适用时间类。
  • 自定义事件单元格。
  • 自定义标题部分视图
  • 自定义标题背景

complex

贡献者

· Jordi Puigdellívol - https://github.com/badchoice
· Eric Horacek - https://github.com/erichoracek
· Kyle Fleming - https://github.com/kylefleming