FSCalendar使用

FSCalendar使用

在项目中经常有使用到日历,大部分使用场景都需要自定义日历,FSCalendar能适应大部分场景

参考如下的使用文档:

  • More usage
  • FSCalendar使用介绍(一) - Hello World
  • FSCalendar使用介绍(二) - 农历、事件
  • FSCalendar使用介绍(三) - 订制外观

FSCalendar大概由如下的几部分组成:
FSCalendar使用_第1张图片
FSCalendar使用_第2张图片

  • FSCalendarHeaderTouchDeliver - 为FSCalendarHeaderViewFSCalendarWeekdayView组合成的部分

外观定制

Scope

scope分为month和week,通过scope来设置

typedef NS_ENUM(NSUInteger, FSCalendarScope) { //范围
    FSCalendarScopeMonth,
    FSCalendarScopeWeek
};
@property (assign, nonatomic) FSCalendarScope scope;

改变scope后,会触发内在的frame发生变化,可在如下方法中做出调整:

- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated;

例如,通过如下的代码做出动态的调节:

- (IBAction)toggleClicked:(id)sender
{
    if (self.calendar.scope == FSCalendarScopeMonth) {
        [self.calendar setScope:FSCalendarScopeWeek animated:_animationSwitch.on];
    } else {
        [self.calendar setScope:FSCalendarScopeMonth animated:_animationSwitch.on];
    }
}

FSCalendar使用_第3张图片

placeholderType

typedef NS_ENUM(NSUInteger, FSCalendarPlaceholderType) {
    FSCalendarPlaceholderTypeNone          = 0,
    FSCalendarPlaceholderTypeFillHeadTail  = 1, //填满头部和尾部
    FSCalendarPlaceholderTypeFillSixRows   = 2 //6行
};

FSCalendarPlaceholderTypeFillSixRows
FSCalendar使用_第4张图片
FSCalendarPlaceholderTypeFillHeadTail
FSCalendar使用_第5张图片

FSCalendarPlaceholderTypeNone
FSCalendar使用_第6张图片

中文

calendar.locale = [NSLocale localeWithLocaleIdentifier:@"zh_cn"];//中文

设置caseOptions

calendarappearance属性为FSCalendarAppearance类型,其有个caseOptions属性
如果设置为如下的属性:

calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase|FSCalendarCaseOptionsWeekdayUsesUpperCase;

FSCalendar使用_第7张图片
如果设置为

calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase|FSCalendarCaseOptionsWeekdayUsesSingleUpperCase;

显示效果

颜色

颜色可通过appearance相关的属性来设置,也可通过代理来实现

FSCalendarAppearance

FSCalendar使用_第8张图片
FSCalendarDelegateAppearance

@protocol FSCalendarDelegateAppearance <FSCalendarDelegate>

FSCalendar使用_第9张图片

字体

FSCalendar使用_第10张图片

单元格中的字体大小默认是自适应的,需要先关闭自适应。否则字体尺寸不会发生改变。

calendar.appearance.adjustsFontSizeToFitContentSize = NO; // 关闭文字尺寸自适应

背景、边框、事件圆点

同样可以通过属性和代理来设置

FSCalendarAppearance

FSCalendar使用_第11张图片
FSCalendarDelegateAppearance

FSCalendar使用_第12张图片

圆角

默认情况下today和选中的标识都是圆圈

FSCalendar使用_第13张图片
通过calendar.appearance.borderRadius = 0,可设置为方形

FSCalendar使用_第14张图片

其它设置

firstWeekday

通过firstWeekday属性可以设置calendar的第一天是星期几,如果设置2,则表示第一个是Mon星期一

scrollDirection

scrollDirection设置滚动的方向,可选值如下:

typedef NS_ENUM(NSUInteger, FSCalendarScrollDirection) {//滚动方向
    FSCalendarScrollDirectionVertical,
    FSCalendarScrollDirectionHorizontal
};

设置不显示today的圆圈

默认情况下,today的显示效果类似如下:

FSCalendar使用_第15张图片
如果设置self.calendar.today = nil;,则显示效果如下:

FSCalendar使用_第16张图片

设置日期范围

// FSCalendarDataSource
- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar
{
    return yourMinimumDate;
}

- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar
{
    return yourMaximumDate;
}

设置日期可以使用如下的方法:

self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
......
- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar
{
    return [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:5 toDate:[NSDate date] options:0];
}

FSCalendarCell

FSCalendarCell大概由如下的几个部分组成:

  • titleLabel - 显示日期
  • subtitleLabel - 显示副标题
  • shapeLayer - 表示标识
  • imageView
  • FSCalendarEventIndicator - 表示事件event的view

FSCalendar使用_第17张图片

可继承FSCalendarCell,自定义cell,达到自定义UI的目的
先注册,再使用

[calendar registerClass:[DIYCalendarCell class] forCellReuseIdentifier:@"cell"];

- (FSCalendarCell *)calendar:(FSCalendar *)calendar cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
{
    DIYCalendarCell *cell = [calendar dequeueReusableCellWithIdentifier:@"cell" forDate:date atMonthPosition:monthPosition];
    return cell;
}

你可能感兴趣的:(iOS,开源项目学习)