测试测试通过 | ✗ |
语言语言 | Obj-CObjective C |
许可协议 | MIT |
发布时间最新发布 | 2016年11月 |
由 Jordi Puigdellivol 维护。
依赖项 | |
Collection | >= 0 |
EasyDate | ~> 0.9 |
UIColor-HexString | >= 0 |
Masonry | >= 0 |
简洁而强大的 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.
这是一个如何自定义的复杂示例。
· Jordi Puigdellívol - https://github.com/badchoice
· Eric Horacek - https://github.com/erichoracek
· Kyle Fleming - https://github.com/kylefleming