FSCalendarSeparators

This commit is contained in:
Wenchao Ding 2016-10-27 16:39:12 +08:00
parent d49bf95f1e
commit fb915abc11
19 changed files with 257 additions and 150 deletions

View File

@ -24,12 +24,12 @@
3052336B1D8170E50070AAFE /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233501D8170E50070AAFE /* FSCalendarAppearance.m */; };
3052336C1D8170E50070AAFE /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233521D8170E50070AAFE /* FSCalendarCell.m */; };
3052336D1D8170E50070AAFE /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233541D8170E50070AAFE /* FSCalendarCollectionView.m */; };
305233701D8170E50070AAFE /* FSCalendarFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3052335B1D8170E50070AAFE /* FSCalendarFlowLayout.m */; };
305233711D8170E50070AAFE /* FSCalendarHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 3052335D1D8170E50070AAFE /* FSCalendarHeader.m */; };
305233721D8170E50070AAFE /* FSCalendarScopeHandle.m in Sources */ = {isa = PBXBuildFile; fileRef = 3052335F1D8170E50070AAFE /* FSCalendarScopeHandle.m */; };
305233731D8170E50070AAFE /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233611D8170E50070AAFE /* FSCalendarStickyHeader.m */; };
305233741D8170E50070AAFE /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 305233621D8170E50070AAFE /* Info.plist */; };
3055B1CB1DA933AD002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1CA1DA933AD002AFA13 /* FSCalendarExtensions.m */; };
30623F701DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */; };
30A33A0B1DB1CA640039BEA3 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */; };
/* End PBXBuildFile section */
@ -87,8 +87,6 @@
305233531D8170E50070AAFE /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = "<group>"; };
305233541D8170E50070AAFE /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = "<group>"; };
305233571D8170E50070AAFE /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = "<group>"; };
3052335A1D8170E50070AAFE /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = "<group>"; };
3052335B1D8170E50070AAFE /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = "<group>"; };
3052335C1D8170E50070AAFE /* FSCalendarHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeader.h; sourceTree = "<group>"; };
3052335D1D8170E50070AAFE /* FSCalendarHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeader.m; sourceTree = "<group>"; };
3052335E1D8170E50070AAFE /* FSCalendarScopeHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarScopeHandle.h; sourceTree = "<group>"; };
@ -98,6 +96,8 @@
305233621D8170E50070AAFE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3055B1C91DA933AD002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = "<group>"; };
3055B1CA1DA933AD002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = "<group>"; };
30623F6E1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = "<group>"; };
30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = "<group>"; };
30A33A091DB1CA640039BEA3 /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = "<group>"; };
30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -200,8 +200,8 @@
305233541D8170E50070AAFE /* FSCalendarCollectionView.m */,
30A33A091DB1CA640039BEA3 /* FSCalendarConstants.h */,
30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */,
3052335A1D8170E50070AAFE /* FSCalendarFlowLayout.h */,
3052335B1D8170E50070AAFE /* FSCalendarFlowLayout.m */,
30623F6E1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.h */,
30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */,
3052335C1D8170E50070AAFE /* FSCalendarHeader.h */,
3052335D1D8170E50070AAFE /* FSCalendarHeader.m */,
3052335E1D8170E50070AAFE /* FSCalendarScopeHandle.h */,
@ -333,12 +333,12 @@
files = (
30A33A0B1DB1CA640039BEA3 /* FSCalendarConstants.m in Sources */,
305233721D8170E50070AAFE /* FSCalendarScopeHandle.m in Sources */,
30623F701DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */,
305233691D8170E50070AAFE /* FSCalendar.m in Sources */,
305233671D8170E50070AAFE /* FSCalendar+Deprecated.m in Sources */,
3052336B1D8170E50070AAFE /* FSCalendarAppearance.m in Sources */,
305233731D8170E50070AAFE /* FSCalendarStickyHeader.m in Sources */,
305233711D8170E50070AAFE /* FSCalendarHeader.m in Sources */,
305233701D8170E50070AAFE /* FSCalendarFlowLayout.m in Sources */,
3055B1CB1DA933AD002AFA13 /* FSCalendarExtensions.m in Sources */,
3052336C1D8170E50070AAFE /* FSCalendarCell.m in Sources */,
3052336D1D8170E50070AAFE /* FSCalendarCollectionView.m in Sources */,

View File

@ -24,9 +24,9 @@
3092253A1B905C4300123031 /* FSCalendarConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 309225381B905C4300123031 /* FSCalendarConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
3092253B1B905C4300123031 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 309225391B905C4300123031 /* FSCalendarConstants.m */; };
3092253C1B905C4300123031 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 309225391B905C4300123031 /* FSCalendarConstants.m */; };
3095398F1C38D66C00BD37AA /* FSCalendarFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 3095398D1C38D66C00BD37AA /* FSCalendarFlowLayout.h */; settings = {ATTRIBUTES = (Private, ); }; };
309539901C38D66C00BD37AA /* FSCalendarFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3095398E1C38D66C00BD37AA /* FSCalendarFlowLayout.m */; };
309539911C38D66C00BD37AA /* FSCalendarFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3095398E1C38D66C00BD37AA /* FSCalendarFlowLayout.m */; };
3095398F1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */; settings = {ATTRIBUTES = (Private, ); }; };
309539901C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */; };
309539911C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */; };
309A42011D992C4A004E86CB /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 309A42001D992C4A004E86CB /* Images.xcassets */; };
30B0BA9B1B8D8BC9004B9476 /* FSCalendar.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EE638CE21B8A1F550006DD1A /* FSCalendar.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
30B0BAD01B8D8E23004B9476 /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC01B8D8E22004B9476 /* FSCalendar.m */; };
@ -113,8 +113,8 @@
308B58D71CC08FFA004E812D /* ButtonsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ButtonsViewController.m; sourceTree = SOURCE_ROOT; };
309225381B905C4300123031 /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = "<group>"; };
309225391B905C4300123031 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = "<group>"; };
3095398D1C38D66C00BD37AA /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = "<group>"; };
3095398E1C38D66C00BD37AA /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = "<group>"; };
3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = "<group>"; };
3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = "<group>"; };
309A42001D992C4A004E86CB /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = SOURCE_ROOT; };
30B0BABF1B8D8E22004B9476 /* FSCalendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendar.h; sourceTree = "<group>"; };
30B0BAC01B8D8E22004B9476 /* FSCalendar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendar.m; sourceTree = "<group>"; };
@ -227,12 +227,12 @@
30B0BAC41B8D8E22004B9476 /* FSCalendarCell.m */,
EEC9C0371BDC9E7000383A07 /* FSCalendarCollectionView.h */,
EEC9C0381BDC9E7000383A07 /* FSCalendarCollectionView.m */,
3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */,
3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */,
30B0BAC61B8D8E22004B9476 /* FSCalendarHeader.h */,
30B0BAC71B8D8E22004B9476 /* FSCalendarHeader.m */,
30FCB3941BAAD112002B87AD /* FSCalendarStickyHeader.h */,
30FCB3951BAAD112002B87AD /* FSCalendarStickyHeader.m */,
3095398D1C38D66C00BD37AA /* FSCalendarFlowLayout.h */,
3095398E1C38D66C00BD37AA /* FSCalendarFlowLayout.m */,
30CEF8FE1C950C1F008EAFB1 /* FSCalendarAnimator.h */,
30CEF8FF1C950C1F008EAFB1 /* FSCalendarAnimator.m */,
3055B1C01DA9323A002AFA13 /* FSCalendarExtensions.h */,
@ -395,7 +395,7 @@
EEC9C0391BDC9E7000383A07 /* FSCalendarCollectionView.h in Headers */,
30FCB3961BAAD112002B87AD /* FSCalendarStickyHeader.h in Headers */,
3065CA961CD31B81006C218D /* FSCalendarScopeHandle.h in Headers */,
3095398F1C38D66C00BD37AA /* FSCalendarFlowLayout.h in Headers */,
3095398F1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h in Headers */,
3055B1C21DA9323A002AFA13 /* FSCalendarExtensions.h in Headers */,
30CEF9001C950C1F008EAFB1 /* FSCalendarAnimator.h in Headers */,
30B0BB031B8D9B6D004B9476 /* FSCalendarDynamicHeader.h in Headers */,
@ -555,7 +555,7 @@
3065CAA81CD3506A006C218D /* FSCalendar+Deprecated.m in Sources */,
EE638CD31B89DBE90006DD1A /* AppDelegate.m in Sources */,
3092253B1B905C4300123031 /* FSCalendarConstants.m in Sources */,
309539901C38D66C00BD37AA /* FSCalendarFlowLayout.m in Sources */,
309539901C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */,
30F5D85A1B9FC4BB00C1C201 /* MultipleSelectionViewController.m in Sources */,
30FCB3971BAAD112002B87AD /* FSCalendarStickyHeader.m in Sources */,
30B0BAD21B8D8E23004B9476 /* FSCalendarCell.m in Sources */,
@ -588,7 +588,7 @@
30B0BAF81B8D9AC1004B9476 /* FSCalendarHeader.m in Sources */,
3092253C1B905C4300123031 /* FSCalendarConstants.m in Sources */,
3055B1C41DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */,
309539911C38D66C00BD37AA /* FSCalendarFlowLayout.m in Sources */,
309539911C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */,
3065CA981CD31B81006C218D /* FSCalendarScopeHandle.m in Sources */,
30CEF9021C950C1F008EAFB1 /* FSCalendarAnimator.m in Sources */,
30FCB3981BAAD112002B87AD /* FSCalendarStickyHeader.m in Sources */,
@ -699,7 +699,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -739,7 +739,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;

View File

@ -96,6 +96,8 @@
self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
self.calendar.appearance.separators = FSCalendarSeparatorInterRows;
}
- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar

View File

@ -53,18 +53,18 @@
// [_calendar selectDate:[self.dateFormatter1 dateFromString:@"2015/10/05"]];
_datesShouldNotBeSelected = @[@"2015/08/07",
@"2015/09/07",
@"2015/10/07",
@"2015/11/07",
@"2015/12/07",
_datesShouldNotBeSelected = @[@"2016/08/07",
@"2016/09/07",
@"2016/10/07",
@"2016/11/07",
@"2016/12/07",
@"2016/01/07",
@"2016/02/07"];
_datesWithEvent = @[@"2015-10-03",
@"2015-10-07",
@"2015-10-15",
@"2015-10-25"];
_datesWithEvent = @[@"2016-10-03",
@"2016-10-07",
@"2016-10-15",
@"2016-10-25"];
// self.calendar.appearance.weekdayBackground = [UIColor cyanColor];

View File

@ -10,7 +10,7 @@
#import "FSCalendarHeader.h"
#import "FSCalendarStickyHeader.h"
#import "FSCalendarCell.h"
#import "FSCalendarFlowLayout.h"
#import "FSCalendarCollectionViewLayout.h"
#import "FSCalendarAnimator.h"
#import "FSCalendarScopeHandle.h"
@ -106,8 +106,8 @@ typedef NS_ENUM(NSUInteger, FSCalendarOrientation) {
@property (weak , nonatomic) UIImageView *weekdayView;
@property (weak , nonatomic) FSCalendarScopeHandle *scopeHandle;
@property (weak , nonatomic) FSCalendarCollectionView *collectionView;
@property (weak , nonatomic) FSCalendarFlowLayout *collectionViewLayout;
@property (strong, nonatomic) FSCalendarAnimator *animator;
@property (weak , nonatomic) FSCalendarCollectionViewLayout *collectionViewLayout;
@property (weak , nonatomic) FSCalendarHeader *header;
@property (weak , nonatomic) FSCalendarHeaderTouchDeliver *deliver;
@ -262,7 +262,7 @@ typedef NS_ENUM(NSUInteger, FSCalendarOrientation) {
[contentView addSubview:daysContainer];
self.daysContainer = daysContainer;
FSCalendarFlowLayout *collectionViewLayout = [[FSCalendarFlowLayout alloc] init];
FSCalendarCollectionViewLayout *collectionViewLayout = [[FSCalendarCollectionViewLayout alloc] init];
collectionViewLayout.calendar = self;
FSCalendarCollectionView *collectionView = [[FSCalendarCollectionView alloc] initWithFrame:CGRectZero
@ -287,12 +287,12 @@ typedef NS_ENUM(NSUInteger, FSCalendarOrientation) {
if (!FSCalendarInAppExtension) {
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
view.backgroundColor = FSCalendarStandardSeparatorColor;
view.backgroundColor = FSCalendarStandardLineColor;
[self addSubview:view];
self.topBorder = view;
view = [[UIView alloc] initWithFrame:CGRectZero];
view.backgroundColor = FSCalendarStandardSeparatorColor;
view.backgroundColor = FSCalendarStandardLineColor;
[self addSubview:view];
self.bottomBorder = view;

View File

@ -8,7 +8,7 @@
#import "FSCalendar.h"
#import "FSCalendarCollectionView.h"
#import "FSCalendarFlowLayout.h"
#import "FSCalendarCollectionViewLayout.h"
#import "FSCalendarScopeHandle.h"
typedef NS_ENUM(NSUInteger, FSCalendarTransition) {
@ -25,7 +25,7 @@ typedef NS_ENUM(NSUInteger, FSCalendarTransitionState) {
@property (weak, nonatomic) FSCalendar *calendar;
@property (weak, nonatomic) FSCalendarCollectionView *collectionView;
@property (weak, nonatomic) FSCalendarFlowLayout *collectionViewLayout;
@property (weak, nonatomic) FSCalendarCollectionViewLayout *collectionViewLayout;
@property (assign, nonatomic) FSCalendarTransition transition;
@property (assign, nonatomic) FSCalendarTransitionState state;

View File

@ -31,6 +31,11 @@ typedef NS_OPTIONS(NSUInteger, FSCalendarCaseOptions) {
FSCalendarCaseOptionsWeekdayUsesSingleUpperCase = 2 << 4,
};
typedef NS_OPTIONS(NSUInteger, FSCalendarSeparators) {
FSCalendarSeparatorInterRows = 1 << 0,
FSCalendarSeparatorInterColumns = 1 << 1 // Will implemented soon
};
/**
* FSCalendarAppearance determines the fonts and colors of components in the calendar.
*
@ -208,6 +213,12 @@ typedef NS_OPTIONS(NSUInteger, FSCalendarCaseOptions) {
*/
@property (assign, nonatomic) FSCalendarCaseOptions caseOptions;
/**
* The line integrations for calendar.
*
*/
@property (assign, nonatomic) FSCalendarSeparators separators;
/**
* A Boolean value indicates whether the calendar should adjust font size by its content size.
*

View File

@ -602,6 +602,14 @@
}
}
- (void)setSeparators:(FSCalendarSeparators)separators
{
if (_separators != separators) {
_separators = separators;
[_calendar.collectionView.collectionViewLayout invalidateLayout];
}
}
- (void)invalidateAppearance
{
[self invalidateFonts];

View File

@ -11,3 +11,8 @@
@interface FSCalendarCollectionView : UICollectionView
@end
@interface FSCalendarSeparator : UICollectionReusableView
@end

View File

@ -8,6 +8,7 @@
#import "FSCalendarCollectionView.h"
#import "FSCalendarExtensions.h"
#import "FSCalendarConstants.h"
@interface FSCalendarCollectionView ()
@ -68,3 +69,24 @@
@end
@implementation FSCalendarSeparator
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = FSCalendarStandardSeparatorColor;
}
return self;
}
- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
self.frame = layoutAttributes.frame;
}
@end

View File

@ -10,11 +10,8 @@
@class FSCalendar;
typedef NS_ENUM(NSUInteger, FSCalendarScope);
@interface FSCalendarFlowLayout : UICollectionViewFlowLayout <UICollectionViewDelegateFlowLayout>
@interface FSCalendarCollectionViewLayout : UICollectionViewFlowLayout
@property (weak, nonatomic) FSCalendar *calendar;
@end

View File

@ -0,0 +1,150 @@
//
// FSCalendarAnimationLayout.m
// FSCalendar
//
// Created by dingwenchao on 1/3/16.
// Copyright © 2016 wenchaoios. All rights reserved.
//
#import "FSCalendarCollectionViewLayout.h"
#import "FSCalendar.h"
#import "FSCalendarDynamicHeader.h"
#import "FSCalendarCollectionView.h"
#import "FSCalendarExtensions.h"
#import "FSCalendarConstants.h"
#import <objc/runtime.h>
#define kFSCalendarSeparatorInterRows @"FSCalendarSeparatorInterRows"
#define kFSCalendarSeparatorInterColumns @"FSCalendarSeparatorInterColumns"
@interface FSCalendarCollectionViewLayout ()
@end
@implementation FSCalendarCollectionViewLayout
- (instancetype)init
{
self = [super init];
if (self) {
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.minimumInteritemSpacing = 0;
self.minimumLineSpacing = 0;
self.itemSize = CGSizeMake(1, 1);
self.sectionInset = UIEdgeInsetsZero;
[self registerClass:[FSCalendarSeparator class] forDecorationViewOfKind:kFSCalendarSeparatorInterRows];
}
return self;
}
- (void)prepareLayout
{
[super prepareLayout];
CGFloat rowHeight = self.calendar.preferredRowHeight;
if (!self.calendar.floatingMode) {
self.headerReferenceSize = CGSizeZero;
CGFloat padding = self.calendar.preferredPadding;
if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
padding = FSCalendarFloor(padding);
rowHeight = FSCalendarFloor(rowHeight*2)*0.5-1; // Round to nearest multiple of 0.5. e.g. (16.8->16.5),(16.2->16.0)
}
self.sectionInset = UIEdgeInsetsMake(padding, 0, padding, 0);
switch (self.calendar.scope) {
case FSCalendarScopeMonth: {
CGFloat columnWidth = self.collectionView.fs_width/7.0-(self.scrollDirection == UICollectionViewScrollDirectionVertical)*0.1;
CGSize itemSize = CGSizeMake(columnWidth,rowHeight);
self.itemSize = itemSize;
break;
}
case FSCalendarScopeWeek: {
CGSize itemSize = CGSizeMake(self.collectionView.fs_width/7.0, rowHeight);
self.itemSize = itemSize;
break;
}
}
} else {
CGFloat headerHeight = self.calendar.preferredWeekdayHeight*1.5+self.calendar.preferredHeaderHeight;
self.headerReferenceSize = CGSizeMake(self.collectionView.fs_width, headerHeight);
CGFloat columnWidth = self.collectionView.fs_width/7.0-(self.scrollDirection == UICollectionViewScrollDirectionVertical)*0.1;
CGSize itemSize = CGSizeMake(columnWidth,rowHeight);
self.itemSize = itemSize;
self.sectionInset = UIEdgeInsetsZero;
}
}
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray<UICollectionViewLayoutAttributes *> *attributesArray = [super layoutAttributesForElementsInRect:rect];
// Clean on week mode
if (self.calendar.scope == FSCalendarScopeWeek) {
return attributesArray;
}
if ((self.calendar.appearance.separators & FSCalendarSeparatorInterRows) != 0) {
// Get row leadings
NSArray<UICollectionViewLayoutAttributes *> *visibleRows = [attributesArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(UICollectionViewLayoutAttributes * _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
if (evaluatedObject.representedElementCategory != UICollectionElementCategoryCell) {
return NO;
}
NSDate *currentPage = [self.calendar.gregorian dateByAddingUnit:NSCalendarUnitMonth value:evaluatedObject.indexPath.section toDate:[self.calendar beginingOfMonth:self.calendar.minimumDate] options:0];
NSInteger numberOfRows = [self.calendar numberOfRowsInMonth:currentPage];
switch (self.scrollDirection) {
case UICollectionViewScrollDirectionHorizontal: {
return evaluatedObject.indexPath.item < numberOfRows-1;
}
case UICollectionViewScrollDirectionVertical: {
return evaluatedObject.indexPath.item%7==0 && evaluatedObject.indexPath.item/7<numberOfRows-1;
}
}
return NO;
}]];
NSMutableArray *decorationAttributes = [NSMutableArray array];
for (UICollectionViewLayoutAttributes *attibutes in visibleRows) {
UICollectionViewLayoutAttributes *layoutAttributes = [UICollectionViewLayoutAttributes layoutAttributesForDecorationViewOfKind:kFSCalendarSeparatorInterRows withIndexPath:attibutes.indexPath];
CGFloat decorationOffset = CGRectGetMaxY(attibutes.frame);
CGFloat extraOffset = (self.scrollDirection == UICollectionViewScrollDirectionHorizontal ? 0.5 : -0.5) * FSCalendarStandardSeparatorThickness;
layoutAttributes.frame = CGRectMake(CGRectGetMinX(attibutes.frame), decorationOffset+extraOffset, self.self.collectionView.fs_width, FSCalendarStandardSeparatorThickness);
layoutAttributes.zIndex = NSIntegerMax;
[decorationAttributes addObject:layoutAttributes];
}
return [attributesArray arrayByAddingObjectsFromArray:decorationAttributes];
}
return attributesArray;
}
@end
#undef kFSCalendarSeparatorInterColumns
#undef kFSCalendarSeparatorInterRows

View File

@ -18,6 +18,7 @@ UIKIT_EXTERN CGFloat const FSCalendarStandardWeekdayHeight;
UIKIT_EXTERN CGFloat const FSCalendarStandardMonthlyPageHeight;
UIKIT_EXTERN CGFloat const FSCalendarStandardWeeklyPageHeight;
UIKIT_EXTERN CGFloat const FSCalendarStandardCellDiameter;
UIKIT_EXTERN CGFloat const FSCalendarStandardSeparatorThickness;
UIKIT_EXTERN CGFloat const FSCalendarAutomaticDimension;
UIKIT_EXTERN CGFloat const FSCalendarDefaultBounceAnimationDuration;
UIKIT_EXTERN CGFloat const FSCalendarStandardRowHeight;
@ -41,7 +42,8 @@ UIKIT_EXTERN NSInteger const FSCalendarDefaultHourComponent;
#define FSCalendarStandardTitleTextColor FSColorRGBA(14,69,221 ,1.0)
#define FSCalendarStandardEventDotColor FSColorRGBA(31,119,219,0.75)
#define FSCalendarStandardSeparatorColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.25]
#define FSCalendarStandardLineColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.30]
#define FSCalendarStandardSeparatorColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.60]
#define FSCalendarStandardScopeHandleColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.50]
#define FSColorRGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
@ -54,19 +56,13 @@ UIKIT_EXTERN NSInteger const FSCalendarDefaultHourComponent;
#endif
#define FSCalendarUseWeakSelf __weak __typeof__(self) FSCalendarWeakSelf = self;
#define FSCalendarUseStrongSelf __typeof__(self) self = FSCalendarWeakSelf;
#define FSCalendarUseStrongSelf __strong __typeof__(self) self = FSCalendarWeakSelf;
#pragma mark - Deprecated
#define FSCalendarDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
FSCalendarDeprecated('FSCalendarCellShape')
typedef NS_ENUM(NSInteger, FSCalendarCellStyle) {
FSCalendarCellStyleCircle = 0,
FSCalendarCellStyleRectangle = 1
};
FSCalendarDeprecated('FSCalendarScrollDirection')
typedef NS_ENUM(NSInteger, FSCalendarFlow) {
FSCalendarFlowVertical,

View File

@ -15,6 +15,7 @@ CGFloat const FSCalendarStandardWeekdayHeight = 25;
CGFloat const FSCalendarStandardMonthlyPageHeight = 300.0;
CGFloat const FSCalendarStandardWeeklyPageHeight = 108+1/3.0;
CGFloat const FSCalendarStandardCellDiameter = 100/3.0;
CGFloat const FSCalendarStandardSeparatorThickness = 0.5;
CGFloat const FSCalendarAutomaticDimension = -1;
CGFloat const FSCalendarDefaultBounceAnimationDuration = 0.15;
CGFloat const FSCalendarStandardRowHeight = 38+1.0/3;

View File

@ -16,7 +16,7 @@
#import "FSCalendarHeader.h"
#import "FSCalendarStickyHeader.h"
#import "FSCalendarCollectionView.h"
#import "FSCalendarFlowLayout.h"
#import "FSCalendarCollectionViewLayout.h"
#import "FSCalendarScopeHandle.h"
#import "FSCalendarAnimator.h"
@ -26,7 +26,7 @@
@property (readonly, nonatomic) FSCalendarHeader *header;
@property (readonly, nonatomic) FSCalendarCollectionView *collectionView;
@property (readonly, nonatomic) FSCalendarScopeHandle *scopeHandle;
@property (readonly, nonatomic) FSCalendarFlowLayout *collectionViewLayout;
@property (readonly, nonatomic) FSCalendarCollectionViewLayout *collectionViewLayout;
@property (readonly, nonatomic) FSCalendarAnimator *animator;
@property (readonly, nonatomic) NSArray<UILabel *> *weekdays;
@property (readonly, nonatomic) BOOL floatingMode;

View File

@ -1,85 +0,0 @@
//
// FSCalendarAnimationLayout.m
// FSCalendar
//
// Created by dingwenchao on 1/3/16.
// Copyright © 2016 wenchaoios. All rights reserved.
//
#import "FSCalendarFlowLayout.h"
#import "FSCalendarDynamicHeader.h"
#import "FSCalendar.h"
#import "FSCalendarExtensions.h"
#import <objc/runtime.h>
@implementation FSCalendarFlowLayout
- (instancetype)init
{
self = [super init];
if (self) {
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.minimumInteritemSpacing = 0;
self.minimumLineSpacing = 0;
self.itemSize = CGSizeMake(1, 1);
self.sectionInset = UIEdgeInsetsZero;
}
return self;
}
- (void)prepareLayout
{
[super prepareLayout];
CGFloat rowHeight = self.calendar.preferredRowHeight;
if (!self.calendar.floatingMode) {
self.headerReferenceSize = CGSizeZero;
CGFloat padding = self.calendar.preferredPadding;
if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
padding = FSCalendarFloor(padding);
rowHeight = FSCalendarFloor(rowHeight*2)*0.5; // Round to nearest multiple of 0.5. e.g. (16.8->16.5),(16.2->16.0)
}
self.sectionInset = UIEdgeInsetsMake(padding, 0, padding, 0);
switch (self.calendar.scope) {
case FSCalendarScopeMonth: {
CGSize itemSize = CGSizeMake(
self.collectionView.fs_width/7.0-(self.scrollDirection == UICollectionViewScrollDirectionVertical)*0.1,
rowHeight
);
self.itemSize = itemSize;
break;
}
case FSCalendarScopeWeek: {
CGSize itemSize = CGSizeMake(self.collectionView.fs_width/7.0, rowHeight);
self.itemSize = itemSize;
break;
}
}
} else {
CGFloat headerHeight = self.calendar.preferredWeekdayHeight*1.5+self.calendar.preferredHeaderHeight;
self.headerReferenceSize = CGSizeMake(self.collectionView.fs_width, headerHeight);
CGSize itemSize = CGSizeMake(
self.collectionView.fs_width/7-(self.scrollDirection == UICollectionViewScrollDirectionVertical)*0.1,
rowHeight
);
self.itemSize = itemSize;
self.sectionInset = UIEdgeInsetsZero;
}
}
@end

View File

@ -15,7 +15,7 @@
@interface FSCalendarStickyHeader ()
@property (weak , nonatomic) UIView *contentView;
@property (weak , nonatomic) UIView *separator;
@property (weak , nonatomic) UIView *bottomBorder;
@property (weak , nonatomic) UIImageView *weekdayView;
@property (assign, nonatomic) BOOL needsAdjustingViewFrame;
@ -46,9 +46,9 @@
self.titleLabel = label;
view = [[UIView alloc] initWithFrame:CGRectZero];
view.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.25];
view.backgroundColor = FSCalendarStandardLineColor;
[_contentView addSubview:view];
self.separator = view;
self.bottomBorder = view;
NSMutableArray *weekdayLabels = [NSMutableArray arrayWithCapacity:7];
for (int i = 0; i < 7; i++) {
@ -82,8 +82,8 @@
CGFloat titleHeight = [@"1" sizeWithAttributes:@{NSFontAttributeName:_appearance.preferredHeaderTitleFont}].height*1.5 + weekdayMargin*3;
_separator.frame = CGRectMake(0, _contentView.fs_height-weekdayHeight-weekdayMargin*2, _contentView.fs_width, 1.0);
_titleLabel.frame = CGRectMake(0, _separator.fs_bottom-titleHeight-weekdayMargin, titleWidth,titleHeight);
_bottomBorder.frame = CGRectMake(0, _contentView.fs_height-weekdayHeight-weekdayMargin*2, _contentView.fs_width, 1.0);
_titleLabel.frame = CGRectMake(0, _bottomBorder.fs_bottom-titleHeight-weekdayMargin, titleWidth,titleHeight);
self.weekdayView.frame = CGRectMake(self.weekdayLabels.firstObject.fs_left, self.weekdayLabels.firstObject.fs_top, self.weekdayLabels.lastObject.fs_right, self.weekdayLabels.firstObject.fs_height);

View File

@ -13,7 +13,7 @@
303DE6C11DB1CA3A00F43A0F /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 303DE6C01DB1CA3A00F43A0F /* FSCalendarConstants.m */; };
3055B1C81DA9338C002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1C71DA9338C002AFA13 /* FSCalendarExtensions.m */; };
306DB1461C96700800A10478 /* FSCalendarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 306DB1451C96700800A10478 /* FSCalendarAnimator.m */; };
3078A8B11C50C0ED003D33EF /* FSCalendarFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC9C03F1BDCA2D600383A07 /* FSCalendarFlowLayout.m */; };
30921AD01DC0F5E000616B57 /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 30921ACF1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.m */; };
30D458E91DB4E2DB00B163C7 /* LoadViewExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D458E81DB4E2DB00B163C7 /* LoadViewExampleViewController.swift */; };
EE0954AD1B97DDE0007F6964 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0954AC1B97DDE0007F6964 /* AppDelegate.swift */; };
EE0954AF1B97DDE0007F6964 /* InterfaceBuilderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0954AE1B97DDE0007F6964 /* InterfaceBuilderViewController.swift */; };
@ -51,6 +51,8 @@
3055B1C71DA9338C002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = "<group>"; };
306DB1441C96700800A10478 /* FSCalendarAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarAnimator.h; sourceTree = "<group>"; };
306DB1451C96700800A10478 /* FSCalendarAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarAnimator.m; sourceTree = "<group>"; };
30921ACE1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = "<group>"; };
30921ACF1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = "<group>"; };
30D458E81DB4E2DB00B163C7 /* LoadViewExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadViewExampleViewController.swift; sourceTree = "<group>"; };
EE0954A71B97DDE0007F6964 /* SwiftExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
EE0954AB1B97DDE0007F6964 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -77,8 +79,6 @@
EE2B62821BB6D7FE00ACB430 /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarStickyHeader.m; sourceTree = "<group>"; };
EEC9C03C1BDCA2D600383A07 /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = "<group>"; };
EEC9C03D1BDCA2D600383A07 /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = "<group>"; };
EEC9C03E1BDCA2D600383A07 /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = "<group>"; };
EEC9C03F1BDCA2D600383A07 /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -174,8 +174,8 @@
303DE6C01DB1CA3A00F43A0F /* FSCalendarConstants.m */,
EEC9C03C1BDCA2D600383A07 /* FSCalendarCollectionView.h */,
EEC9C03D1BDCA2D600383A07 /* FSCalendarCollectionView.m */,
EEC9C03E1BDCA2D600383A07 /* FSCalendarFlowLayout.h */,
EEC9C03F1BDCA2D600383A07 /* FSCalendarFlowLayout.m */,
30921ACE1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.h */,
30921ACF1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.m */,
306DB1441C96700800A10478 /* FSCalendarAnimator.h */,
306DB1451C96700800A10478 /* FSCalendarAnimator.m */,
EE0954D81B97DDF4007F6964 /* FSCalendarHeader.h */,
@ -301,12 +301,12 @@
303DE6C11DB1CA3A00F43A0F /* FSCalendarConstants.m in Sources */,
EEC9C0401BDCA2D600383A07 /* FSCalendarCollectionView.m in Sources */,
EE0954E81B97DDF4007F6964 /* FSCalendarHeader.m in Sources */,
30921AD01DC0F5E000616B57 /* FSCalendarCollectionViewLayout.m in Sources */,
303478391DB520C8007BBD2E /* TableViewController.swift in Sources */,
EE2B62831BB6D7FE00ACB430 /* FSCalendarStickyHeader.m in Sources */,
306DB1461C96700800A10478 /* FSCalendarAnimator.m in Sources */,
EE0954E41B97DDF4007F6964 /* FSCalendar.m in Sources */,
3055B1C81DA9338C002AFA13 /* FSCalendarExtensions.m in Sources */,
3078A8B11C50C0ED003D33EF /* FSCalendarFlowLayout.m in Sources */,
30D458E91DB4E2DB00B163C7 /* LoadViewExampleViewController.swift in Sources */,
EE0954E51B97DDF4007F6964 /* FSCalendarAppearance.m in Sources */,
EE0954AD1B97DDE0007F6964 /* AppDelegate.swift in Sources */,

View File

@ -13,12 +13,12 @@
300036F11D9252CB00C795DE /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D51D9252CB00C795DE /* FSCalendarAppearance.m */; };
300036F21D9252CB00C795DE /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D71D9252CB00C795DE /* FSCalendarCell.m */; };
300036F31D9252CB00C795DE /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */; };
300036F61D9252CB00C795DE /* FSCalendarFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036E01D9252CB00C795DE /* FSCalendarFlowLayout.m */; };
300036F71D9252CB00C795DE /* FSCalendarHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036E21D9252CB00C795DE /* FSCalendarHeader.m */; };
300036F81D9252CB00C795DE /* FSCalendarScopeHandle.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036E41D9252CB00C795DE /* FSCalendarScopeHandle.m */; };
300036F91D9252CB00C795DE /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036E61D9252CB00C795DE /* FSCalendarStickyHeader.m */; };
300036FA1D9252CB00C795DE /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 300036E71D9252CB00C795DE /* Info.plist */; };
3055B1CE1DA933D0002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1CD1DA933D0002AFA13 /* FSCalendarExtensions.m */; };
30623F6D1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */; };
3091756F1D7EBD4100BBEB79 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3091756E1D7EBD4100BBEB79 /* main.m */; };
309175721D7EBD4100BBEB79 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 309175711D7EBD4100BBEB79 /* AppDelegate.m */; };
309175751D7EBD4100BBEB79 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 309175741D7EBD4100BBEB79 /* ViewController.m */; };
@ -70,8 +70,6 @@
300036D81D9252CB00C795DE /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = "<group>"; };
300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = "<group>"; };
300036DC1D9252CB00C795DE /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = "<group>"; };
300036DF1D9252CB00C795DE /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = "<group>"; };
300036E01D9252CB00C795DE /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = "<group>"; };
300036E11D9252CB00C795DE /* FSCalendarHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeader.h; sourceTree = "<group>"; };
300036E21D9252CB00C795DE /* FSCalendarHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeader.m; sourceTree = "<group>"; };
300036E31D9252CB00C795DE /* FSCalendarScopeHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarScopeHandle.h; sourceTree = "<group>"; };
@ -81,6 +79,8 @@
300036E71D9252CB00C795DE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3055B1CC1DA933D0002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = "<group>"; };
3055B1CD1DA933D0002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = "<group>"; };
30623F6B1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = "<group>"; };
30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = "<group>"; };
3091756A1D7EBD4100BBEB79 /* TodayExtensionExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TodayExtensionExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
3091756E1D7EBD4100BBEB79 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
309175701D7EBD4100BBEB79 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
@ -135,8 +135,8 @@
300036D81D9252CB00C795DE /* FSCalendarCollectionView.h */,
300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */,
300036DC1D9252CB00C795DE /* FSCalendarDynamicHeader.h */,
300036DF1D9252CB00C795DE /* FSCalendarFlowLayout.h */,
300036E01D9252CB00C795DE /* FSCalendarFlowLayout.m */,
30623F6B1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.h */,
30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */,
300036E11D9252CB00C795DE /* FSCalendarHeader.h */,
300036E21D9252CB00C795DE /* FSCalendarHeader.m */,
300036E31D9252CB00C795DE /* FSCalendarScopeHandle.h */,
@ -333,10 +333,10 @@
files = (
300036F91D9252CB00C795DE /* FSCalendarStickyHeader.m in Sources */,
30A33A0E1DB1CA8D0039BEA3 /* FSCalendarConstants.m in Sources */,
30623F6D1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */,
300036ED1D9252CB00C795DE /* FSCalendar+Deprecated.m in Sources */,
300036F01D9252CB00C795DE /* FSCalendarAnimator.m in Sources */,
300036F31D9252CB00C795DE /* FSCalendarCollectionView.m in Sources */,
300036F61D9252CB00C795DE /* FSCalendarFlowLayout.m in Sources */,
300036F71D9252CB00C795DE /* FSCalendarHeader.m in Sources */,
3055B1CE1DA933D0002AFA13 /* FSCalendarExtensions.m in Sources */,
300036F81D9252CB00C795DE /* FSCalendarScopeHandle.m in Sources */,