From fb915abc116a94a8bc27db38fb3ac5777fd68a07 Mon Sep 17 00:00:00 2001 From: Wenchao Ding Date: Thu, 27 Oct 2016 16:39:12 +0800 Subject: [PATCH] FSCalendarSeparators --- .../project.pbxproj | 12 +- Example/FSCalendar.xcodeproj/project.pbxproj | 24 +-- Example/HidePlaceholderViewController.m | 2 + Example/StoryboardExampleViewController.m | 18 +-- FSCalendar/FSCalendar.m | 10 +- FSCalendar/FSCalendarAnimator.h | 4 +- FSCalendar/FSCalendarAppearance.h | 11 ++ FSCalendar/FSCalendarAppearance.m | 8 + FSCalendar/FSCalendarCollectionView.h | 5 + FSCalendar/FSCalendarCollectionView.m | 22 +++ ...out.h => FSCalendarCollectionViewLayout.h} | 5 +- FSCalendar/FSCalendarCollectionViewLayout.m | 150 ++++++++++++++++++ FSCalendar/FSCalendarConstants.h | 12 +- FSCalendar/FSCalendarConstants.m | 1 + FSCalendar/FSCalendarDynamicHeader.h | 4 +- FSCalendar/FSCalendarFlowLayout.m | 85 ---------- FSCalendar/FSCalendarStickyHeader.m | 10 +- .../SwiftExample.xcodeproj/project.pbxproj | 12 +- .../project.pbxproj | 12 +- 19 files changed, 257 insertions(+), 150 deletions(-) rename FSCalendar/{FSCalendarFlowLayout.h => FSCalendarCollectionViewLayout.h} (63%) create mode 100644 FSCalendar/FSCalendarCollectionViewLayout.m delete mode 100644 FSCalendar/FSCalendarFlowLayout.m diff --git a/DynamicTodayExtensionExample/DynamicTodayExtensionExample.xcodeproj/project.pbxproj b/DynamicTodayExtensionExample/DynamicTodayExtensionExample.xcodeproj/project.pbxproj index a2cebaa..79bf688 100644 --- a/DynamicTodayExtensionExample/DynamicTodayExtensionExample.xcodeproj/project.pbxproj +++ b/DynamicTodayExtensionExample/DynamicTodayExtensionExample.xcodeproj/project.pbxproj @@ -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 = ""; }; 305233541D8170E50070AAFE /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = ""; }; 305233571D8170E50070AAFE /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = ""; }; - 3052335A1D8170E50070AAFE /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = ""; }; - 3052335B1D8170E50070AAFE /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = ""; }; 3052335C1D8170E50070AAFE /* FSCalendarHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeader.h; sourceTree = ""; }; 3052335D1D8170E50070AAFE /* FSCalendarHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeader.m; sourceTree = ""; }; 3052335E1D8170E50070AAFE /* FSCalendarScopeHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarScopeHandle.h; sourceTree = ""; }; @@ -98,6 +96,8 @@ 305233621D8170E50070AAFE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3055B1C91DA933AD002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = ""; }; 3055B1CA1DA933AD002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = ""; }; + 30623F6E1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = ""; }; + 30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = ""; }; 30A33A091DB1CA640039BEA3 /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = ""; }; 30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = ""; }; /* 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 */, diff --git a/Example/FSCalendar.xcodeproj/project.pbxproj b/Example/FSCalendar.xcodeproj/project.pbxproj index 1d03ba0..75a2cba 100644 --- a/Example/FSCalendar.xcodeproj/project.pbxproj +++ b/Example/FSCalendar.xcodeproj/project.pbxproj @@ -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 = ""; }; 309225391B905C4300123031 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = ""; }; - 3095398D1C38D66C00BD37AA /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = ""; }; - 3095398E1C38D66C00BD37AA /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = ""; }; + 3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = ""; }; + 3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = ""; }; 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 = ""; }; 30B0BAC01B8D8E22004B9476 /* FSCalendar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendar.m; sourceTree = ""; }; @@ -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; diff --git a/Example/HidePlaceholderViewController.m b/Example/HidePlaceholderViewController.m index c7b5c29..1fdfbf8 100644 --- a/Example/HidePlaceholderViewController.m +++ b/Example/HidePlaceholderViewController.m @@ -96,6 +96,8 @@ self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; + self.calendar.appearance.separators = FSCalendarSeparatorInterRows; + } - (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar diff --git a/Example/StoryboardExampleViewController.m b/Example/StoryboardExampleViewController.m index 6c78f5a..e7b4392 100644 --- a/Example/StoryboardExampleViewController.m +++ b/Example/StoryboardExampleViewController.m @@ -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]; diff --git a/FSCalendar/FSCalendar.m b/FSCalendar/FSCalendar.m index c393c84..2d45bd2 100644 --- a/FSCalendar/FSCalendar.m +++ b/FSCalendar/FSCalendar.m @@ -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; diff --git a/FSCalendar/FSCalendarAnimator.h b/FSCalendar/FSCalendarAnimator.h index 056433b..d37dee6 100644 --- a/FSCalendar/FSCalendarAnimator.h +++ b/FSCalendar/FSCalendarAnimator.h @@ -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; diff --git a/FSCalendar/FSCalendarAppearance.h b/FSCalendar/FSCalendarAppearance.h index 549dfaa..2c82bc3 100644 --- a/FSCalendar/FSCalendarAppearance.h +++ b/FSCalendar/FSCalendarAppearance.h @@ -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. * diff --git a/FSCalendar/FSCalendarAppearance.m b/FSCalendar/FSCalendarAppearance.m index 6d97b2c..57b31cf 100644 --- a/FSCalendar/FSCalendarAppearance.m +++ b/FSCalendar/FSCalendarAppearance.m @@ -602,6 +602,14 @@ } } +- (void)setSeparators:(FSCalendarSeparators)separators +{ + if (_separators != separators) { + _separators = separators; + [_calendar.collectionView.collectionViewLayout invalidateLayout]; + } +} + - (void)invalidateAppearance { [self invalidateFonts]; diff --git a/FSCalendar/FSCalendarCollectionView.h b/FSCalendar/FSCalendarCollectionView.h index 1d0f577..2b955a9 100644 --- a/FSCalendar/FSCalendarCollectionView.h +++ b/FSCalendar/FSCalendarCollectionView.h @@ -11,3 +11,8 @@ @interface FSCalendarCollectionView : UICollectionView @end + + +@interface FSCalendarSeparator : UICollectionReusableView + +@end diff --git a/FSCalendar/FSCalendarCollectionView.m b/FSCalendar/FSCalendarCollectionView.m index bc31bbe..bc8bb02 100644 --- a/FSCalendar/FSCalendarCollectionView.m +++ b/FSCalendar/FSCalendarCollectionView.m @@ -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 + + + diff --git a/FSCalendar/FSCalendarFlowLayout.h b/FSCalendar/FSCalendarCollectionViewLayout.h similarity index 63% rename from FSCalendar/FSCalendarFlowLayout.h rename to FSCalendar/FSCalendarCollectionViewLayout.h index fc6f323..84e8088 100644 --- a/FSCalendar/FSCalendarFlowLayout.h +++ b/FSCalendar/FSCalendarCollectionViewLayout.h @@ -10,11 +10,8 @@ @class FSCalendar; -typedef NS_ENUM(NSUInteger, FSCalendarScope); - -@interface FSCalendarFlowLayout : UICollectionViewFlowLayout +@interface FSCalendarCollectionViewLayout : UICollectionViewFlowLayout @property (weak, nonatomic) FSCalendar *calendar; - @end diff --git a/FSCalendar/FSCalendarCollectionViewLayout.m b/FSCalendar/FSCalendarCollectionViewLayout.m new file mode 100644 index 0000000..db98bd8 --- /dev/null +++ b/FSCalendar/FSCalendarCollectionViewLayout.m @@ -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 + +#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 *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 *visibleRows = [attributesArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(UICollectionViewLayoutAttributes * _Nullable evaluatedObject, NSDictionary * _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 *weekdays; @property (readonly, nonatomic) BOOL floatingMode; diff --git a/FSCalendar/FSCalendarFlowLayout.m b/FSCalendar/FSCalendarFlowLayout.m deleted file mode 100644 index cdfc085..0000000 --- a/FSCalendar/FSCalendarFlowLayout.m +++ /dev/null @@ -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 - -@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 diff --git a/FSCalendar/FSCalendarStickyHeader.m b/FSCalendar/FSCalendarStickyHeader.m index 6aeb71b..4cd11e0 100644 --- a/FSCalendar/FSCalendarStickyHeader.m +++ b/FSCalendar/FSCalendarStickyHeader.m @@ -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); diff --git a/SwiftExample/SwiftExample.xcodeproj/project.pbxproj b/SwiftExample/SwiftExample.xcodeproj/project.pbxproj index 053181f..aa36257 100644 --- a/SwiftExample/SwiftExample.xcodeproj/project.pbxproj +++ b/SwiftExample/SwiftExample.xcodeproj/project.pbxproj @@ -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 = ""; }; 306DB1441C96700800A10478 /* FSCalendarAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarAnimator.h; sourceTree = ""; }; 306DB1451C96700800A10478 /* FSCalendarAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarAnimator.m; sourceTree = ""; }; + 30921ACE1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = ""; }; + 30921ACF1DC0F5DF00616B57 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = ""; }; 30D458E81DB4E2DB00B163C7 /* LoadViewExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadViewExampleViewController.swift; sourceTree = ""; }; 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 = ""; }; @@ -77,8 +79,6 @@ EE2B62821BB6D7FE00ACB430 /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarStickyHeader.m; sourceTree = ""; }; EEC9C03C1BDCA2D600383A07 /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = ""; }; EEC9C03D1BDCA2D600383A07 /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = ""; }; - EEC9C03E1BDCA2D600383A07 /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = ""; }; - EEC9C03F1BDCA2D600383A07 /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = ""; }; /* 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 */, diff --git a/TodayExtensionExample/TodayExtensionExample.xcodeproj/project.pbxproj b/TodayExtensionExample/TodayExtensionExample.xcodeproj/project.pbxproj index 7ed7f65..d4516a2 100644 --- a/TodayExtensionExample/TodayExtensionExample.xcodeproj/project.pbxproj +++ b/TodayExtensionExample/TodayExtensionExample.xcodeproj/project.pbxproj @@ -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 = ""; }; 300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = ""; }; 300036DC1D9252CB00C795DE /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = ""; }; - 300036DF1D9252CB00C795DE /* FSCalendarFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarFlowLayout.h; sourceTree = ""; }; - 300036E01D9252CB00C795DE /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarFlowLayout.m; sourceTree = ""; }; 300036E11D9252CB00C795DE /* FSCalendarHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeader.h; sourceTree = ""; }; 300036E21D9252CB00C795DE /* FSCalendarHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeader.m; sourceTree = ""; }; 300036E31D9252CB00C795DE /* FSCalendarScopeHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarScopeHandle.h; sourceTree = ""; }; @@ -81,6 +79,8 @@ 300036E71D9252CB00C795DE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3055B1CC1DA933D0002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = ""; }; 3055B1CD1DA933D0002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = ""; }; + 30623F6B1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = ""; }; + 30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = ""; }; 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 = ""; }; 309175701D7EBD4100BBEB79 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -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 */,