diff --git a/CHANGELOG_AUTO.md b/CHANGELOG_AUTO.md new file mode 100644 index 0000000..cc9143d --- /dev/null +++ b/CHANGELOG_AUTO.md @@ -0,0 +1,177 @@ +# Change Log + +## [0.2.7](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.7) (2015-06-05) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2.6...0.2.7) + +**Closed issues:** + +- Horizontal scroll [\#75](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/75) + +## [0.2.6](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.6) (2015-06-04) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2.5...0.2.6) + +**Closed issues:** + +- Header not sticking properly to the top with more then one cell on the section. [\#74](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/74) + +- Explanation [\#70](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/70) + +- Section header go behind cell when insert via performBatchUpdates [\#68](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/68) + +- A crash when parallaxHeaderReferenceSize is changed [\#65](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/65) + +- Unable to compile CSStickyHeaderFlowLayoutAttributes \(v0.2.4\) [\#57](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/57) + +## [0.2.5](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.5) (2015-04-15) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2.4...0.2.5) + +**Closed issues:** + +- How to create "Spotify" example programmatically? [\#63](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/63) + +- Support device rotation [\#61](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/61) + +- Height of header when minimized [\#60](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/60) + +- EXC\_BAD\_ACCESS on \[super collectionViewContentSize\]; [\#43](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/43) + +**Merged pull requests:** + +- fix issue \#43 [\#62](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/62) ([marciomeschini](https://github.com/marciomeschini)) + +## [0.2.4](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.4) (2015-03-02) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2.3...0.2.4) + +**Closed issues:** + +- No `Podfile' found in the project directory. [\#53](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/53) + +- How to collapse CSAlwaysOnTopHeader [\#51](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/51) + +- ContentOffset on bottom causes flickering to occur when scrolling down [\#50](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/50) + +- Section Header can't receive touches [\#49](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/49) + +- NSInternalInconsistencyException crash in logs [\#46](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/46) + +- Where does the "header" reuseIdentifier come from? [\#42](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/42) + +- pod install fails [\#39](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/39) + +- Crash on iOS 8.1 [\#38](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/38) + +- Layout not working on iOS7.1 [\#37](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/37) + +- ParallaxHeader crash if contain a UILabel [\#36](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/36) + +- MapView inside header not working [\#35](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/35) + +- Creating constraint programmatically for the Parallax Header [\#34](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/34) + +- It doesn't seem to work with Swift [\#32](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/32) + +- Parallax header doesn't show when there are 0 sections [\#22](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/22) + +- NSInternalInconsistencyException when scrolling to the bottom [\#18](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/18) + +- "Snapshotting a view that has not been rendered results in an empty snapshot." [\#12](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/12) + +**Merged pull requests:** + +- CSStickyHeaderFlowLayoutAttributes confirms NSCopying protocol [\#56](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/56) ([i3th](https://github.com/i3th)) + +## [0.2.3](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.3) (2014-10-16) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2.2...0.2.3) + +**Closed issues:** + +- iPhone 6 & Plus Sizes [\#31](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/31) + +- Sticky header not resizing in iOS 7.1 5s simulator, Xcode 6 [\#29](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/29) + +- SHUFFLE PLAY button is not tappable sometimes [\#28](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/28) + +- grow header does not work on iOS 7 \(Xcode 6.0.1\) [\#27](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/27) + +- Autolayout Error [\#26](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/26) + +- xcode 6 gm seed breaks always on top scrolling [\#25](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/25) + +- Content over scroll indicator [\#24](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/24) + +- Header overlaps content when scrollToItemAtIndexPath: is used [\#11](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/11) + +**Merged pull requests:** + +- Show parallax header even if there are 0 sections [\#23](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/23) ([Xyand](https://github.com/Xyand)) + +## [0.2.2](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.2) (2014-09-01) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2.1...0.2.2) + +**Closed issues:** + +- Permit cell height to be zero [\#19](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/19) + +**Merged pull requests:** + +- Fix CollectionView zIndex issue when cells travel between sections [\#20](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/20) ([Xyand](https://github.com/Xyand)) + +- Fix 1px header under navigation bar [\#7](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/7) ([m1entus](https://github.com/m1entus)) + +## [0.2.1](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2.1) (2014-07-31) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.2...0.2.1) + +**Closed issues:** + +- Sticky Header programmatically [\#16](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/16) + +- Crash on reloadData in collection view when header is offscreen [\#15](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/15) + +- Support for landscape mode [\#14](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/14) + +- Is it possible to use CSStickyHeaderFlowLayout only from code? [\#10](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/10) + +- support 6.0 [\#9](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/9) + +- Layout assertion failure [\#6](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/6) + +**Merged pull requests:** + +- fix issue \#15 [\#17](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/17) ([jessesquires](https://github.com/jessesquires)) + +- fixed typo in README.md [\#8](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/8) ([dannyshmueli](https://github.com/dannyshmueli)) + +## [0.2](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.2) (2014-05-02) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.1.1...0.2) + +**Closed issues:** + +- Demo Fails [\#5](https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/5) + +## [0.1.1](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.1.1) (2014-03-24) + +[Full Changelog](https://github.com/jamztang/CSStickyHeaderFlowLayout/compare/0.1.0...0.1.1) + +**Merged pull requests:** + +- Add default to numberOfSectionsInCollectionView: method [\#3](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/3) ([miwillhite](https://github.com/miwillhite)) + +- Add a Bitdeli Badge to README [\#2](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/2) ([bitdeli-chef](https://github.com/bitdeli-chef)) + +## [0.1.0](https://github.com/jamztang/CSStickyHeaderFlowLayout/tree/0.1.0) (2014-02-21) + +**Merged pull requests:** + +- Fixed autolayout issues [\#1](https://github.com/jamztang/CSStickyHeaderFlowLayout/pull/1) ([andreamazz](https://github.com/andreamazz)) + + + +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/CSStickyHeaderFlowLayout.podspec b/CSStickyHeaderFlowLayout.podspec index 307d848..a6ec95b 100644 --- a/CSStickyHeaderFlowLayout.podspec +++ b/CSStickyHeaderFlowLayout.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CSStickyHeaderFlowLayout" - s.version = "0.2.5" + s.version = "0.2.12" s.summary = "Parallax and Sticky header done right using UICollectionViewLayout" s.description = <<-DESC UICollectionView are flexible and you can use supplementary views to diff --git a/Classes/CSStickyHeaderFlowLayout.h b/Classes/CSStickyHeaderFlowLayout.h index a683d30..690b9c2 100644 --- a/Classes/CSStickyHeaderFlowLayout.h +++ b/Classes/CSStickyHeaderFlowLayout.h @@ -8,6 +8,17 @@ #import +//! Project version number for CSStickyHeaderFlowLayout. +FOUNDATION_EXPORT double CSStickyHeaderFlowLayoutVersionNumber; + +//! Project version string for CSStickyHeaderFlowLayout. +FOUNDATION_EXPORT const unsigned char CSStickyHeaderFlowLayoutVersionString[]; + +// Import All public headers +#import + +#pragma mark - + extern NSString *const CSStickyHeaderParallaxHeader; @interface CSStickyHeaderFlowLayout : UICollectionViewFlowLayout @@ -16,5 +27,6 @@ extern NSString *const CSStickyHeaderParallaxHeader; @property (nonatomic) CGSize parallaxHeaderMinimumReferenceSize; @property (nonatomic) BOOL parallaxHeaderAlwaysOnTop; @property (nonatomic) BOOL disableStickyHeaders; +@property (nonatomic) BOOL disableStretching; @end diff --git a/Classes/CSStickyHeaderFlowLayout.m b/Classes/CSStickyHeaderFlowLayout.m index 8a98b6c..610ba91 100644 --- a/Classes/CSStickyHeaderFlowLayout.m +++ b/Classes/CSStickyHeaderFlowLayout.m @@ -9,7 +9,16 @@ #import "CSStickyHeaderFlowLayout.h" #import "CSStickyHeaderFlowLayoutAttributes.h" + NSString *const CSStickyHeaderParallaxHeader = @"CSStickyHeaderParallexHeader"; +static const NSInteger kHeaderZIndex = 1024; + +@interface CSStickyHeaderFlowLayout (Debug) + +- (void)debugLayoutAttributes:(NSArray *)layoutAttributes; + +@end + @implementation CSStickyHeaderFlowLayout @@ -19,16 +28,35 @@ - (void)prepareLayout { - (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingSupplementaryElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)elementIndexPath { + UICollectionViewLayoutAttributes *attributes = [super initialLayoutAttributesForAppearingSupplementaryElementOfKind:elementKind atIndexPath:elementIndexPath]; - UICollectionViewLayoutAttributes *attributes = [super initialLayoutAttributesForAppearingSupplementaryElementOfKind:elementKind - atIndexPath:elementIndexPath]; - CGRect frame = attributes.frame; - frame.origin.y += self.parallaxHeaderReferenceSize.height; - attributes.frame = frame; + if ([elementKind isEqualToString:CSStickyHeaderParallaxHeader]) { + // sticky header do not need to offset + return nil; + } else { + // offset others + + CGRect frame = attributes.frame; + frame.origin.y += self.parallaxHeaderReferenceSize.height; + attributes.frame = frame; + } return attributes; } +- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingSupplementaryElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)elementIndexPath { + + if ([elementKind isEqualToString:CSStickyHeaderParallaxHeader]) { + CSStickyHeaderFlowLayoutAttributes *attribute = (CSStickyHeaderFlowLayoutAttributes *)[self layoutAttributesForSupplementaryViewOfKind:elementKind atIndexPath:elementIndexPath]; + + [self updateParallaxHeaderAttribute:attribute]; + return attribute; + } else { + return [super finalLayoutAttributesForDisappearingSupplementaryElementOfKind:elementKind atIndexPath:elementIndexPath]; + } + return nil; +} + - (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForSupplementaryViewOfKind:kind atIndexPath:indexPath]; @@ -40,131 +68,117 @@ - (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { - // The rect should compensate the header size - CGRect adjustedRect = rect; - adjustedRect.origin.y -= self.parallaxHeaderReferenceSize.height; - - NSMutableArray *allItems = [[super layoutAttributesForElementsInRect:adjustedRect] mutableCopy]; - - NSMutableDictionary *headers = [[NSMutableDictionary alloc] init]; - NSMutableDictionary *lastCells = [[NSMutableDictionary alloc] init]; - __block BOOL visibleParallexHeader; - - [allItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - UICollectionViewLayoutAttributes *attributes = obj; - - CGRect frame = attributes.frame; - frame.origin.y += self.parallaxHeaderReferenceSize.height; - attributes.frame = frame; - - NSIndexPath *indexPath = [(UICollectionViewLayoutAttributes *)obj indexPath]; - if ([[obj representedElementKind] isEqualToString:UICollectionElementKindSectionHeader]) { - [headers setObject:obj forKey:@(indexPath.section)]; - } else if ([[obj representedElementKind] isEqualToString:UICollectionElementKindSectionFooter]) { - // Not implemeneted - } else { + + if (self.collectionView.dataSource != nil) { + // The rect should compensate the header size + CGRect adjustedRect = rect; + adjustedRect.origin.y -= self.parallaxHeaderReferenceSize.height; + + NSMutableArray *allItems = [NSMutableArray array]; + NSArray *originalAttributes = [super layoutAttributesForElementsInRect:adjustedRect]; + //Perform a deep copy of the attributes returned from super + for (UICollectionViewLayoutAttributes *originalAttribute in originalAttributes) { + [allItems addObject:[originalAttribute copy]]; + } + + NSMutableDictionary *headers = [[NSMutableDictionary alloc] init]; + NSMutableDictionary *lastCells = [[NSMutableDictionary alloc] init]; + __block BOOL visibleParallexHeader; + + [allItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + UICollectionViewLayoutAttributes *attributes = obj; + + CGRect frame = attributes.frame; + frame.origin.y += self.parallaxHeaderReferenceSize.height; + attributes.frame = frame; + NSIndexPath *indexPath = [(UICollectionViewLayoutAttributes *)obj indexPath]; - - UICollectionViewLayoutAttributes *currentAttribute = [lastCells objectForKey:@(indexPath.section)]; - - // Get the bottom most cell of that section - if ( ! currentAttribute || indexPath.row > currentAttribute.indexPath.row) { - [lastCells setObject:obj forKey:@(indexPath.section)]; + BOOL isHeader = [[obj representedElementKind] isEqualToString:UICollectionElementKindSectionHeader]; + BOOL isFooter = [[obj representedElementKind] isEqualToString:UICollectionElementKindSectionFooter]; + + if (isHeader) { + [headers setObject:obj forKey:@(indexPath.section)]; + } else if (isFooter) { + // Not implemeneted + } else { + UICollectionViewLayoutAttributes *currentAttribute = [lastCells objectForKey:@(indexPath.section)]; + + // Get the bottom most cell of that section + if ( ! currentAttribute || indexPath.row > currentAttribute.indexPath.row) { + [lastCells setObject:obj forKey:@(indexPath.section)]; + } + + if ([indexPath item] == 0 && [indexPath section] == 0) { + visibleParallexHeader = YES; + } } - - if ([indexPath item] == 0 && [indexPath section] == 0) { - visibleParallexHeader = YES; + + if (isHeader) { + attributes.zIndex = kHeaderZIndex; + } else { + // For iOS 7.0, the cell zIndex should be above sticky section header + attributes.zIndex = 1; } + }]; + + // when the visible rect is at top of the screen, make sure we see + // the parallex header + if (CGRectGetMinY(rect) <= 0) { + visibleParallexHeader = YES; } - - // For iOS 7.0, the cell zIndex should be above sticky section header - attributes.zIndex = 1; - }]; - - // when the visible rect is at top of the screen, make sure we see - // the parallex header - if (CGRectGetMinY(rect) <= 0) { - visibleParallexHeader = YES; - } - - if (self.parallaxHeaderAlwaysOnTop == YES) { - visibleParallexHeader = YES; - } - - - // This method may not be explicitly defined, default to 1 - // https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionViewDataSource_protocol/Reference/Reference.html#jumpTo_6 -// NSUInteger numberOfSections = [self.collectionView.dataSource -// respondsToSelector:@selector(numberOfSectionsInCollectionView:)] -// ? [self.collectionView.dataSource numberOfSectionsInCollectionView:self.collectionView] -// : 1; - - // Create the attributes for the Parallex header - if (visibleParallexHeader && ! CGSizeEqualToSize(CGSizeZero, self.parallaxHeaderReferenceSize)) { - CSStickyHeaderFlowLayoutAttributes *currentAttribute = [CSStickyHeaderFlowLayoutAttributes layoutAttributesForSupplementaryViewOfKind:CSStickyHeaderParallaxHeader withIndexPath:[NSIndexPath indexPathWithIndex:0]]; - CGRect frame = currentAttribute.frame; - frame.size.width = self.parallaxHeaderReferenceSize.width; - frame.size.height = self.parallaxHeaderReferenceSize.height; - - CGRect bounds = self.collectionView.bounds; - CGFloat maxY = CGRectGetMaxY(frame); - - // make sure the frame won't be negative values - CGFloat y = MIN(maxY - self.parallaxHeaderMinimumReferenceSize.height, bounds.origin.y + self.collectionView.contentInset.top); - CGFloat height = MAX(0, -y + maxY); - - - CGFloat maxHeight = self.parallaxHeaderReferenceSize.height; - CGFloat minHeight = self.parallaxHeaderMinimumReferenceSize.height; - CGFloat progressiveness = (height - minHeight)/(maxHeight - minHeight); - currentAttribute.progressiveness = progressiveness; - - // if zIndex < 0 would prevents tap from recognized right under navigation bar - currentAttribute.zIndex = 0; - - // When parallaxHeaderAlwaysOnTop is enabled, we will check when we should update the y position - if (self.parallaxHeaderAlwaysOnTop && height <= self.parallaxHeaderMinimumReferenceSize.height) { - CGFloat insetTop = self.collectionView.contentInset.top; - // Always stick to top but under the nav bar - y = self.collectionView.contentOffset.y + insetTop; - currentAttribute.zIndex = 2000; + + if (self.parallaxHeaderAlwaysOnTop == YES) { + visibleParallexHeader = YES; } - - currentAttribute.frame = (CGRect){ - frame.origin.x, - y, - frame.size.width, - height, - }; - - - [allItems addObject:currentAttribute]; - } - - if ( ! self.disableStickyHeaders) { - [lastCells enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - NSIndexPath *indexPath = [obj indexPath]; - NSNumber *indexPathKey = @(indexPath.section); - - UICollectionViewLayoutAttributes *header = headers[indexPathKey]; - // CollectionView automatically removes headers not in bounds - if ( ! header) { - header = [self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader - atIndexPath:[NSIndexPath indexPathForItem:0 inSection:indexPath.section]]; - - if (header) { - [allItems addObject:header]; + + + // This method may not be explicitly defined, default to 1 + // https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionViewDataSource_protocol/Reference/Reference.html#jumpTo_6 + // NSUInteger numberOfSections = [self.collectionView.dataSource + // respondsToSelector:@selector(numberOfSectionsInCollectionView:)] + // ? [self.collectionView.dataSource numberOfSectionsInCollectionView:self.collectionView] + // : 1; + + // Create the attributes for the Parallex header + if (visibleParallexHeader && ! CGSizeEqualToSize(CGSizeZero, self.parallaxHeaderReferenceSize)) { + CSStickyHeaderFlowLayoutAttributes *currentAttribute = [CSStickyHeaderFlowLayoutAttributes layoutAttributesForSupplementaryViewOfKind:CSStickyHeaderParallaxHeader withIndexPath:[NSIndexPath indexPathWithIndex:0]]; + [self updateParallaxHeaderAttribute:currentAttribute]; + + [allItems addObject:currentAttribute]; + } + + if ( ! self.disableStickyHeaders) { + [lastCells enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + NSIndexPath *indexPath = [obj indexPath]; + NSNumber *indexPathKey = @(indexPath.section); + + UICollectionViewLayoutAttributes *header = headers[indexPathKey]; + // CollectionView automatically removes headers not in bounds + if ( ! header) { + header = [self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader + atIndexPath:[NSIndexPath indexPathForItem:0 inSection:indexPath.section]]; + + if (!CGSizeEqualToSize(CGSizeZero, header.frame.size)) { + [allItems addObject:header]; + } } - } - [self updateHeaderAttributes:header lastCellAttributes:lastCells[indexPathKey]]; - }]; + if (!CGSizeEqualToSize(CGSizeZero, header.frame.size)) { + [self updateHeaderAttributes:header lastCellAttributes:lastCells[indexPathKey]]; + } + }]; + } + + // For debugging purpose + // [self debugLayoutAttributes:allItems]; + + return allItems; + } else { + return nil; } - - return allItems; } - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { - UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForItemAtIndexPath:indexPath]; + UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForItemAtIndexPath:indexPath].copy; CGRect frame = attributes.frame; frame.origin.y += self.parallaxHeaderReferenceSize.height; attributes.frame = frame; @@ -204,7 +218,7 @@ - (void)setParallaxHeaderReferenceSize:(CGSize)parallaxHeaderReferenceSize { - (void)updateHeaderAttributes:(UICollectionViewLayoutAttributes *)attributes lastCellAttributes:(UICollectionViewLayoutAttributes *)lastCellAttributes { CGRect currentBounds = self.collectionView.bounds; - attributes.zIndex = 1024; + attributes.zIndex = kHeaderZIndex; attributes.hidden = NO; CGPoint origin = attributes.frame.origin; @@ -228,4 +242,96 @@ - (void)updateHeaderAttributes:(UICollectionViewLayoutAttributes *)attributes la }; } +- (void)updateParallaxHeaderAttribute:(CSStickyHeaderFlowLayoutAttributes *)currentAttribute { + + CGRect frame = currentAttribute.frame; + frame.size.width = self.parallaxHeaderReferenceSize.width; + frame.size.height = self.parallaxHeaderReferenceSize.height; + + CGRect bounds = self.collectionView.bounds; + CGFloat maxY = CGRectGetMaxY(frame); + + // make sure the frame won't be negative values + CGFloat y = MIN(maxY - self.parallaxHeaderMinimumReferenceSize.height, bounds.origin.y + self.collectionView.contentInset.top); + CGFloat height = MAX(0, -y + maxY); + + + CGFloat maxHeight = self.parallaxHeaderReferenceSize.height; + CGFloat minHeight = self.parallaxHeaderMinimumReferenceSize.height; + CGFloat progressiveness = (height - minHeight)/(maxHeight - minHeight); + currentAttribute.progressiveness = progressiveness; + + // if zIndex < 0 would prevents tap from recognized right under navigation bar + currentAttribute.zIndex = 0; + + // When parallaxHeaderAlwaysOnTop is enabled, we will check when we should update the y position + if (self.parallaxHeaderAlwaysOnTop && height <= self.parallaxHeaderMinimumReferenceSize.height) { + CGFloat insetTop = self.collectionView.contentInset.top; + // Always stick to top but under the nav bar + y = self.collectionView.contentOffset.y + insetTop; + currentAttribute.zIndex = 2000; + } + + currentAttribute.frame = (CGRect){ + frame.origin.x, + y, + frame.size.width, + self.disableStretching && height > maxHeight ? maxHeight : height, + }; + +} + @end + +#pragma mark - Debugging + +@implementation CSStickyHeaderFlowLayoutAttributes (Debug) + +- (NSString *)description { + NSString *indexPathString = [NSString stringWithFormat:@"{%ld, %ld}", (long)self.indexPath.section, (long)self.indexPath.item]; + + NSString *desc = [NSString stringWithFormat:@" indexPath: %@ zIndex: %ld valid: %@ kind: %@", self, indexPathString, (long)self.zIndex, [self isValid] ? @"YES" : @"NO", self.representedElementKind ?: @"cell"]; + + return desc; +} + +- (BOOL)isValid { + switch (self.representedElementCategory) { + case UICollectionElementCategoryCell: + if (self.zIndex != 1) { + return NO; + } + return YES; + case UICollectionElementCategorySupplementaryView: + if ([self.representedElementKind isEqualToString:CSStickyHeaderParallaxHeader]) { + return YES; + } else if (self.zIndex < 1024) { + return NO; + } + return YES; + default: + return YES; + } +} + +@end + + +@implementation CSStickyHeaderFlowLayout (Debug) + +- (void)debugLayoutAttributes:(NSArray *)layoutAttributes { + __block BOOL hasInvalid = NO; + [layoutAttributes enumerateObjectsUsingBlock:^(CSStickyHeaderFlowLayoutAttributes *attr, NSUInteger idx, BOOL *stop) { + hasInvalid = ![attr isValid]; + if (hasInvalid) { + *stop = YES; + } + }]; + + if (hasInvalid) { + NSLog(@"CSStickyHeaderFlowLayout: %@", layoutAttributes); + } +} + +@end + diff --git a/Classes/CSStickyHeaderFlowLayoutAttributes.m b/Classes/CSStickyHeaderFlowLayoutAttributes.m index 0876d36..39e261c 100644 --- a/Classes/CSStickyHeaderFlowLayoutAttributes.m +++ b/Classes/CSStickyHeaderFlowLayoutAttributes.m @@ -16,4 +16,18 @@ - (id)copyWithZone:(NSZone *)zone { return copy; } +- (void)setZIndex:(NSInteger)zIndex { + [super setZIndex:zIndex]; + + // Fixes: Section header go behind cell when insert via performBatchUpdates #68 + // https://github.com/jamztang/CSStickyHeaderFlowLayout/issues/68#issuecomment-108678022 + // Reference: UICollectionView setLayout:animated: not preserving zIndex + // http://stackoverflow.com/questions/12659301/uicollectionview-setlayoutanimated-not-preserving-zindex + + // originally our solution is to translate the section header above the original z position, + // however, scroll indicator will be covered by those cells and section header if z position is >= 1 + // so instead we translate the original cell to be -1, and make sure the cell are hit test proven. + self.transform3D = CATransform3DMakeTranslation(0, 0, zIndex == 1 ? -1 : 0); +} + @end diff --git a/Project/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h b/Project/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h new file mode 100644 index 0000000..8bc4428 --- /dev/null +++ b/Project/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h @@ -0,0 +1,21 @@ +// +// CSStickyHeaderFlowLayout.h +// CSStickyHeaderFlowLayout +// +// Created by James Tang on 16/7/15. +// Copyright (c) 2015 Jamz Tang. All rights reserved. +// + +#import + +//! Project version number for CSStickyHeaderFlowLayout. +FOUNDATION_EXPORT double CSStickyHeaderFlowLayoutVersionNumber; + +//! Project version string for CSStickyHeaderFlowLayout. +FOUNDATION_EXPORT const unsigned char CSStickyHeaderFlowLayoutVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + +#import +#import \ No newline at end of file diff --git a/Project/CSStickyHeaderFlowLayout/Info.plist b/Project/CSStickyHeaderFlowLayout/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/Project/CSStickyHeaderFlowLayout/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/Project/CSStickyHeaderFlowLayoutCarthage/CSStickyHeaderFlowLayoutCarthage.h b/Project/CSStickyHeaderFlowLayoutCarthage/CSStickyHeaderFlowLayoutCarthage.h new file mode 100644 index 0000000..d3de69d --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutCarthage/CSStickyHeaderFlowLayoutCarthage.h @@ -0,0 +1,19 @@ +// +// CSStickyHeaderFlowLayoutCarthage.h +// CSStickyHeaderFlowLayoutCarthage +// +// Created by Christian Enevoldsen on 16/08/16. +// Copyright © 2016 Jamz Tang. All rights reserved. +// + +#import + +//! Project version number for CSStickyHeaderFlowLayoutCarthage. +FOUNDATION_EXPORT double CSStickyHeaderFlowLayoutCarthageVersionNumber; + +//! Project version string for CSStickyHeaderFlowLayoutCarthage. +FOUNDATION_EXPORT const unsigned char CSStickyHeaderFlowLayoutCarthageVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Project/CSStickyHeaderFlowLayoutCarthage/Info.plist b/Project/CSStickyHeaderFlowLayoutCarthage/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutCarthage/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/project.pbxproj b/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/project.pbxproj index fbf06cb..05e7bc1 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/project.pbxproj +++ b/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/project.pbxproj @@ -14,10 +14,17 @@ 1A14657818F13832003B643B /* CSStickyParallaxHeaderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A14657718F13832003B643B /* CSStickyParallaxHeaderViewController.m */; }; 1A18AE5518F18764003DC8CF /* CSAlwaysOnTopHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1A18AE5418F18764003DC8CF /* CSAlwaysOnTopHeader.xib */; }; 1A18AE5818F1947B003DC8CF /* CSAlwaysOnTopHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A18AE5718F1947B003DC8CF /* CSAlwaysOnTopHeader.m */; }; + 1A4B2F601B56C539007F67CC /* CSStickyHeaderFlowLayout.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A4B2F551B56C539007F67CC /* CSStickyHeaderFlowLayout.framework */; }; + 1A4B2F691B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F681B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.swift */; }; + 1A4B2F791B56C5A6007F67CC /* CSStickyHeaderFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4B2F751B56C5A6007F67CC /* CSStickyHeaderFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A4B2F7A1B56C5A6007F67CC /* CSStickyHeaderFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F761B56C5A6007F67CC /* CSStickyHeaderFlowLayout.m */; }; + 1A4B2F7B1B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4B2F771B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A4B2F7C1B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F781B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.m */; }; 1AC0D88518AA38380072B3F1 /* CSParallaxHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1AC0D88418AA38380072B3F1 /* CSParallaxHeader.xib */; }; 1AC0D88718AA39B50072B3F1 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC0D88618AA39B50072B3F1 /* MapKit.framework */; }; 1AC0D88918AA3AF80072B3F1 /* CSSearchBarHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1AC0D88818AA3AF80072B3F1 /* CSSearchBarHeader.xib */; }; 1AC0D88C18AA3B300072B3F1 /* CSLockedHeaderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC0D88B18AA3B300072B3F1 /* CSLockedHeaderViewController.m */; }; + 1AC67D171B5AC27F0091AFCD /* MyPulling.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC67D161B5AC27F0091AFCD /* MyPulling.m */; }; 1AFE0956187D677000CA880A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AFE0955187D677000CA880A /* Foundation.framework */; }; 1AFE0958187D677000CA880A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AFE0957187D677000CA880A /* CoreGraphics.framework */; }; 1AFE095A187D677000CA880A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AFE0959187D677000CA880A /* UIKit.framework */; }; @@ -33,10 +40,29 @@ 1AFE097F187D677000CA880A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1AFE097D187D677000CA880A /* InfoPlist.strings */; }; 1AFE0981187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE0980187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests.m */; }; 1AFE0992187D688300CA880A /* CSCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE0991187D688300CA880A /* CSCell.m */; }; + AF1D0D491D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1D0D481D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF1D0D4E1D6320A800F9FA68 /* CSStickyHeaderFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F761B56C5A6007F67CC /* CSStickyHeaderFlowLayout.m */; }; + AF1D0D4F1D6320A800F9FA68 /* CSStickyHeaderFlowLayoutAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F781B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.m */; }; + AF1D0D501D6320B100F9FA68 /* CSStickyHeaderFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4B2F751B56C5A6007F67CC /* CSStickyHeaderFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF1D0D511D6320B100F9FA68 /* CSStickyHeaderFlowLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4B2F771B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; B36BC395070946668DCF2AFF /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 491370024AF54DD8BFB773DA /* libPods.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 1A4B2F611B56C539007F67CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AFE094A187D677000CA880A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1A4B2F541B56C539007F67CC; + remoteInfo = CSStickyHeaderFlowLayout; + }; + 1A4B2F631B56C539007F67CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AFE094A187D677000CA880A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1AFE0951187D677000CA880A; + remoteInfo = CSStickyHeaderFlowLayoutDemo; + }; 1AFE0978187D677000CA880A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1AFE094A187D677000CA880A /* Project object */; @@ -46,6 +72,19 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 1A4B2F6D1B56C539007F67CC /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 1A0117F218AD036800AC836F /* CSGrowHeaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSGrowHeaderViewController.h; sourceTree = ""; }; 1A0117F318AD036800AC836F /* CSGrowHeaderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSGrowHeaderViewController.m; sourceTree = ""; }; @@ -58,11 +97,22 @@ 1A18AE5418F18764003DC8CF /* CSAlwaysOnTopHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CSAlwaysOnTopHeader.xib; sourceTree = ""; }; 1A18AE5618F1947B003DC8CF /* CSAlwaysOnTopHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSAlwaysOnTopHeader.h; sourceTree = ""; }; 1A18AE5718F1947B003DC8CF /* CSAlwaysOnTopHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSAlwaysOnTopHeader.m; sourceTree = ""; }; + 1A4B2F551B56C539007F67CC /* CSStickyHeaderFlowLayout.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CSStickyHeaderFlowLayout.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A4B2F581B56C539007F67CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1A4B2F5F1B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CSStickyHeaderFlowLayoutTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A4B2F671B56C539007F67CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1A4B2F681B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CSStickyHeaderFlowLayoutTests.swift; sourceTree = ""; }; + 1A4B2F751B56C5A6007F67CC /* CSStickyHeaderFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSStickyHeaderFlowLayout.h; path = ../../Classes/CSStickyHeaderFlowLayout.h; sourceTree = ""; }; + 1A4B2F761B56C5A6007F67CC /* CSStickyHeaderFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CSStickyHeaderFlowLayout.m; path = ../../Classes/CSStickyHeaderFlowLayout.m; sourceTree = ""; }; + 1A4B2F771B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSStickyHeaderFlowLayoutAttributes.h; path = ../../Classes/CSStickyHeaderFlowLayoutAttributes.h; sourceTree = ""; }; + 1A4B2F781B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CSStickyHeaderFlowLayoutAttributes.m; path = ../../Classes/CSStickyHeaderFlowLayoutAttributes.m; sourceTree = ""; }; 1AC0D88418AA38380072B3F1 /* CSParallaxHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CSParallaxHeader.xib; sourceTree = ""; }; 1AC0D88618AA39B50072B3F1 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; 1AC0D88818AA3AF80072B3F1 /* CSSearchBarHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CSSearchBarHeader.xib; sourceTree = ""; }; 1AC0D88A18AA3B300072B3F1 /* CSLockedHeaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSLockedHeaderViewController.h; sourceTree = ""; }; 1AC0D88B18AA3B300072B3F1 /* CSLockedHeaderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSLockedHeaderViewController.m; sourceTree = ""; }; + 1AC67D151B5AC27F0091AFCD /* MyPulling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyPulling.h; sourceTree = ""; }; + 1AC67D161B5AC27F0091AFCD /* MyPulling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyPulling.m; sourceTree = ""; }; 1AFE0952187D677000CA880A /* CSStickyHeaderFlowLayoutDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CSStickyHeaderFlowLayoutDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1AFE0955187D677000CA880A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1AFE0957187D677000CA880A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -84,11 +134,32 @@ 1AFE0980187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CSStickyHeaderFlowLayoutDemoTests.m; sourceTree = ""; }; 1AFE0990187D688300CA880A /* CSCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSCell.h; sourceTree = ""; }; 1AFE0991187D688300CA880A /* CSCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSCell.m; sourceTree = ""; }; + 229ECB0968A8A873A6AEB59D /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 491370024AF54DD8BFB773DA /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - F79A5DC7FE3548A1989A34C0 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = ""; }; + 58D371C1C7F562AB1D536637 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + 6BDE4094D41E4DE6515DF055 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + AD97E1BDF2B20F6336CBF8D7 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + AF1D0D461D63203300F9FA68 /* CSStickyHeaderFlowLayout.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CSStickyHeaderFlowLayout.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AF1D0D481D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSStickyHeaderFlowLayoutCarthage.h; sourceTree = ""; }; + AF1D0D4A1D63203300F9FA68 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 1A4B2F511B56C539007F67CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A4B2F5C1B56C539007F67CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4B2F601B56C539007F67CC /* CSStickyHeaderFlowLayout.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1AFE094F187D677000CA880A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -111,17 +182,74 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1D0D421D63203300F9FA68 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 034852391EBFCBDC0011D58A /* Pods */ = { + isa = PBXGroup; + children = ( + 6BDE4094D41E4DE6515DF055 /* Pods.debug.xcconfig */, + AD97E1BDF2B20F6336CBF8D7 /* Pods.release.xcconfig */, + ); + name = Pods; + path = ..; + sourceTree = ""; + }; + 1A4B2F561B56C539007F67CC /* CSStickyHeaderFlowLayout */ = { + isa = PBXGroup; + children = ( + 1A4B2F751B56C5A6007F67CC /* CSStickyHeaderFlowLayout.h */, + 1A4B2F761B56C5A6007F67CC /* CSStickyHeaderFlowLayout.m */, + 1A4B2F771B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.h */, + 1A4B2F781B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.m */, + 1A4B2F571B56C539007F67CC /* Supporting Files */, + ); + path = CSStickyHeaderFlowLayout; + sourceTree = ""; + }; + 1A4B2F571B56C539007F67CC /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 1A4B2F581B56C539007F67CC /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 1A4B2F651B56C539007F67CC /* CSStickyHeaderFlowLayoutTests */ = { + isa = PBXGroup; + children = ( + 1A4B2F681B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.swift */, + 1A4B2F661B56C539007F67CC /* Supporting Files */, + ); + path = CSStickyHeaderFlowLayoutTests; + sourceTree = ""; + }; + 1A4B2F661B56C539007F67CC /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 1A4B2F671B56C539007F67CC /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; 1AFE0949187D677000CA880A = { isa = PBXGroup; children = ( 1AFE095B187D677000CA880A /* CSStickyHeaderFlowLayoutDemo */, 1AFE097A187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests */, + 1A4B2F561B56C539007F67CC /* CSStickyHeaderFlowLayout */, + 1A4B2F651B56C539007F67CC /* CSStickyHeaderFlowLayoutTests */, + AF1D0D471D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage */, 1AFE0954187D677000CA880A /* Frameworks */, 1AFE0953187D677000CA880A /* Products */, - F79A5DC7FE3548A1989A34C0 /* Pods.xcconfig */, + 9DDE38A70ED787DEBF9A6411 /* Pods */, ); sourceTree = ""; }; @@ -130,6 +258,9 @@ children = ( 1AFE0952187D677000CA880A /* CSStickyHeaderFlowLayoutDemo.app */, 1AFE0973187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests.xctest */, + 1A4B2F551B56C539007F67CC /* CSStickyHeaderFlowLayout.framework */, + 1A4B2F5F1B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.xctest */, + AF1D0D461D63203300F9FA68 /* CSStickyHeaderFlowLayout.framework */, ); name = Products; sourceTree = ""; @@ -209,11 +340,14 @@ 1AFE098F187D685200CA880A /* Cell */ = { isa = PBXGroup; children = ( + 1AC67D151B5AC27F0091AFCD /* MyPulling.h */, + 1AC67D161B5AC27F0091AFCD /* MyPulling.m */, 1AFE0990187D688300CA880A /* CSCell.h */, 1AFE0991187D688300CA880A /* CSCell.m */, 1A0BCA1F1A80B25D005D9F7C /* CSSectionHeader.h */, 1A0BCA201A80B25D005D9F7C /* CSSectionHeader.m */, 1A18AE5618F1947B003DC8CF /* CSAlwaysOnTopHeader.h */, + 034852391EBFCBDC0011D58A /* Pods */, 1A18AE5718F1947B003DC8CF /* CSAlwaysOnTopHeader.m */, 1AC0D88418AA38380072B3F1 /* CSParallaxHeader.xib */, 1AC0D88818AA3AF80072B3F1 /* CSSearchBarHeader.xib */, @@ -223,9 +357,86 @@ name = Cell; sourceTree = ""; }; + 9DDE38A70ED787DEBF9A6411 /* Pods */ = { + isa = PBXGroup; + children = ( + 58D371C1C7F562AB1D536637 /* Pods.debug.xcconfig */, + 229ECB0968A8A873A6AEB59D /* Pods.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + AF1D0D471D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage */ = { + isa = PBXGroup; + children = ( + AF1D0D481D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage.h */, + AF1D0D4A1D63203300F9FA68 /* Info.plist */, + ); + path = CSStickyHeaderFlowLayoutCarthage; + sourceTree = ""; + }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 1A4B2F521B56C539007F67CC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4B2F791B56C5A6007F67CC /* CSStickyHeaderFlowLayout.h in Headers */, + 1A4B2F7B1B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AF1D0D431D63203300F9FA68 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AF1D0D501D6320B100F9FA68 /* CSStickyHeaderFlowLayout.h in Headers */, + AF1D0D511D6320B100F9FA68 /* CSStickyHeaderFlowLayoutAttributes.h in Headers */, + AF1D0D491D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ + 1A4B2F541B56C539007F67CC /* CSStickyHeaderFlowLayout */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1A4B2F731B56C539007F67CC /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayout" */; + buildPhases = ( + 1A4B2F501B56C539007F67CC /* Sources */, + 1A4B2F511B56C539007F67CC /* Frameworks */, + 1A4B2F521B56C539007F67CC /* Headers */, + 1A4B2F531B56C539007F67CC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CSStickyHeaderFlowLayout; + productName = CSStickyHeaderFlowLayout; + productReference = 1A4B2F551B56C539007F67CC /* CSStickyHeaderFlowLayout.framework */; + productType = "com.apple.product-type.framework"; + }; + 1A4B2F5E1B56C539007F67CC /* CSStickyHeaderFlowLayoutTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1A4B2F741B56C539007F67CC /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayoutTests" */; + buildPhases = ( + 1A4B2F5B1B56C539007F67CC /* Sources */, + 1A4B2F5C1B56C539007F67CC /* Frameworks */, + 1A4B2F5D1B56C539007F67CC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1A4B2F621B56C539007F67CC /* PBXTargetDependency */, + 1A4B2F641B56C539007F67CC /* PBXTargetDependency */, + ); + name = CSStickyHeaderFlowLayoutTests; + productName = CSStickyHeaderFlowLayoutTests; + productReference = 1A4B2F5F1B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 1AFE0951187D677000CA880A /* CSStickyHeaderFlowLayoutDemo */ = { isa = PBXNativeTarget; buildConfigurationList = 1AFE0984187D677000CA880A /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayoutDemo" */; @@ -235,6 +446,7 @@ 1AFE094F187D677000CA880A /* Frameworks */, 1AFE0950187D677000CA880A /* Resources */, D421C3C38E994F76AF2EBD05 /* Copy Pods Resources */, + 1A4B2F6D1B56C539007F67CC /* Embed Frameworks */, ); buildRules = ( ); @@ -263,18 +475,47 @@ productReference = 1AFE0973187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + AF1D0D451D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF1D0D4D1D63203300F9FA68 /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayoutCarthage" */; + buildPhases = ( + AF1D0D411D63203300F9FA68 /* Sources */, + AF1D0D421D63203300F9FA68 /* Frameworks */, + AF1D0D431D63203300F9FA68 /* Headers */, + AF1D0D441D63203300F9FA68 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CSStickyHeaderFlowLayoutCarthage; + productName = CSStickyHeaderFlowLayoutCarthage; + productReference = AF1D0D461D63203300F9FA68 /* CSStickyHeaderFlowLayout.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 1AFE094A187D677000CA880A /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0630; + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; ORGANIZATIONNAME = "Jamz Tang"; TargetAttributes = { + 1A4B2F541B56C539007F67CC = { + CreatedOnToolsVersion = 6.3.1; + }; + 1A4B2F5E1B56C539007F67CC = { + CreatedOnToolsVersion = 6.3.1; + TestTargetID = 1AFE0951187D677000CA880A; + }; 1AFE0972187D677000CA880A = { TestTargetID = 1AFE0951187D677000CA880A; }; + AF1D0D451D63203300F9FA68 = { + CreatedOnToolsVersion = 7.3.1; + }; }; }; buildConfigurationList = 1AFE094D187D677000CA880A /* Build configuration list for PBXProject "CSStickyHeaderFlowLayoutDemo" */; @@ -292,11 +533,28 @@ targets = ( 1AFE0951187D677000CA880A /* CSStickyHeaderFlowLayoutDemo */, 1AFE0972187D677000CA880A /* CSStickyHeaderFlowLayoutDemoTests */, + 1A4B2F541B56C539007F67CC /* CSStickyHeaderFlowLayout */, + 1A4B2F5E1B56C539007F67CC /* CSStickyHeaderFlowLayoutTests */, + AF1D0D451D63203300F9FA68 /* CSStickyHeaderFlowLayoutCarthage */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 1A4B2F531B56C539007F67CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A4B2F5D1B56C539007F67CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1AFE0950187D677000CA880A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -320,6 +578,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1D0D441D63203300F9FA68 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -350,12 +615,29 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 1A4B2F501B56C539007F67CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4B2F7C1B56C5A6007F67CC /* CSStickyHeaderFlowLayoutAttributes.m in Sources */, + 1A4B2F7A1B56C5A6007F67CC /* CSStickyHeaderFlowLayout.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A4B2F5B1B56C539007F67CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4B2F691B56C539007F67CC /* CSStickyHeaderFlowLayoutTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1AFE094E187D677000CA880A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -363,6 +645,7 @@ 1A18AE5818F1947B003DC8CF /* CSAlwaysOnTopHeader.m in Sources */, 1A0BCA211A80B25D005D9F7C /* CSSectionHeader.m in Sources */, 1AFE096C187D677000CA880A /* CSParallaxHeaderViewController.m in Sources */, + 1AC67D171B5AC27F0091AFCD /* MyPulling.m in Sources */, 1AFE0992187D688300CA880A /* CSCell.m in Sources */, 1AFE0966187D677000CA880A /* AppDelegate.m in Sources */, 1AFE0962187D677000CA880A /* main.m in Sources */, @@ -380,9 +663,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1D0D411D63203300F9FA68 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF1D0D4F1D6320A800F9FA68 /* CSStickyHeaderFlowLayoutAttributes.m in Sources */, + AF1D0D4E1D6320A800F9FA68 /* CSStickyHeaderFlowLayout.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 1A4B2F621B56C539007F67CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1A4B2F541B56C539007F67CC /* CSStickyHeaderFlowLayout */; + targetProxy = 1A4B2F611B56C539007F67CC /* PBXContainerItemProxy */; + }; + 1A4B2F641B56C539007F67CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1AFE0951187D677000CA880A /* CSStickyHeaderFlowLayoutDemo */; + targetProxy = 1A4B2F631B56C539007F67CC /* PBXContainerItemProxy */; + }; 1AFE0979187D677000CA880A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1AFE0951187D677000CA880A /* CSStickyHeaderFlowLayoutDemo */; @@ -418,6 +720,115 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 1A4B2F6F1B56C539007F67CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_UNREACHABLE_CODE = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = CSStickyHeaderFlowLayout/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 1A4B2F701B56C539007F67CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_UNREACHABLE_CODE = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = CSStickyHeaderFlowLayout/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 1A4B2F711B56C539007F67CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_UNREACHABLE_CODE = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = CSStickyHeaderFlowLayoutTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CSStickyHeaderFlowLayoutDemo.app/CSStickyHeaderFlowLayoutDemo"; + }; + name = Debug; + }; + 1A4B2F721B56C539007F67CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_UNREACHABLE_CODE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = CSStickyHeaderFlowLayoutTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CSStickyHeaderFlowLayoutDemo.app/CSStickyHeaderFlowLayoutDemo"; + }; + name = Release; + }; 1AFE0982187D677000CA880A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -436,6 +847,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -490,13 +902,15 @@ }; 1AFE0985187D677000CA880A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F79A5DC7FE3548A1989A34C0 /* Pods.xcconfig */; + baseConfigurationReference = 58D371C1C7F562AB1D536637 /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Prefix.pch"; INFOPLIST_FILE = "CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -504,13 +918,15 @@ }; 1AFE0986187D677000CA880A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F79A5DC7FE3548A1989A34C0 /* Pods.xcconfig */; + baseConfigurationReference = 229ECB0968A8A873A6AEB59D /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Prefix.pch"; INFOPLIST_FILE = "CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -532,6 +948,7 @@ "$(inherited)", ); INFOPLIST_FILE = "CSStickyHeaderFlowLayoutDemoTests/CSStickyHeaderFlowLayoutDemoTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; @@ -550,15 +967,92 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Prefix.pch"; INFOPLIST_FILE = "CSStickyHeaderFlowLayoutDemoTests/CSStickyHeaderFlowLayoutDemoTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; }; name = Release; }; + AF1D0D4B1D63203300F9FA68 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = CSStickyHeaderFlowLayoutCarthage/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.jamztang.CSStickyHeaderFlowLayoutFramework.CSStickyHeaderFlowLayoutCarthage; + PRODUCT_NAME = CSStickyHeaderFlowLayout; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + AF1D0D4C1D63203300F9FA68 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = CSStickyHeaderFlowLayoutCarthage/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.jamztang.CSStickyHeaderFlowLayoutFramework.CSStickyHeaderFlowLayoutCarthage; + PRODUCT_NAME = CSStickyHeaderFlowLayout; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 1A4B2F731B56C539007F67CC /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayout" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1A4B2F6F1B56C539007F67CC /* Debug */, + 1A4B2F701B56C539007F67CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1A4B2F741B56C539007F67CC /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayoutTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1A4B2F711B56C539007F67CC /* Debug */, + 1A4B2F721B56C539007F67CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 1AFE094D187D677000CA880A /* Build configuration list for PBXProject "CSStickyHeaderFlowLayoutDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -586,6 +1080,14 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF1D0D4D1D63203300F9FA68 /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayoutCarthage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF1D0D4B1D63203300F9FA68 /* Debug */, + AF1D0D4C1D63203300F9FA68 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; /* End XCConfigurationList section */ }; rootObject = 1AFE094A187D677000CA880A /* Project object */; diff --git a/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/xcshareddata/xcschemes/CSStickyHeaderFlowLayoutCarthage.xcscheme b/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/xcshareddata/xcschemes/CSStickyHeaderFlowLayoutCarthage.xcscheme new file mode 100644 index 0000000..8927e3b --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutDemo.xcodeproj/xcshareddata/xcschemes/CSStickyHeaderFlowLayoutCarthage.xcscheme @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/contents.xcworkspacedata b/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/contents.xcworkspacedata index 5524b11..accf9bd 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/contents.xcworkspacedata +++ b/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/contents.xcworkspacedata @@ -1 +1,13 @@ - \ No newline at end of file + + + + + + + + + diff --git a/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/CSStickyHeaderFlowLayoutDemo.xccheckout b/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/CSStickyHeaderFlowLayoutDemo.xccheckout index 8082dae..ca1b6e6 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/CSStickyHeaderFlowLayoutDemo.xccheckout +++ b/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/CSStickyHeaderFlowLayoutDemo.xccheckout @@ -10,29 +10,29 @@ CSStickyHeaderFlowLayoutDemo IDESourceControlProjectOriginsDictionary - 9FCEA6B4-6BFD-40A1-97AA-77294F4A62B7 + 701B5006D938B65FD42237DDAF25824304CA7A66 https://github.com/jamztang/CSStickyHeaderFlowLayout.git IDESourceControlProjectPath Project/CSStickyHeaderFlowLayoutDemo.xcworkspace IDESourceControlProjectRelativeInstallPathDictionary - 9FCEA6B4-6BFD-40A1-97AA-77294F4A62B7 + 701B5006D938B65FD42237DDAF25824304CA7A66 ../.. IDESourceControlProjectURL https://github.com/jamztang/CSStickyHeaderFlowLayout.git IDESourceControlProjectVersion - 110 + 111 IDESourceControlProjectWCCIdentifier - 9FCEA6B4-6BFD-40A1-97AA-77294F4A62B7 + 701B5006D938B65FD42237DDAF25824304CA7A66 IDESourceControlProjectWCConfigurations IDESourceControlRepositoryExtensionIdentifierKey public.vcs.git IDESourceControlWCCIdentifierKey - 9FCEA6B4-6BFD-40A1-97AA-77294F4A62B7 + 701B5006D938B65FD42237DDAF25824304CA7A66 IDESourceControlWCCName CSStickyHeaderFlowLayout diff --git a/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Base.lproj/Main.storyboard b/Project/CSStickyHeaderFlowLayoutDemo/Base.lproj/Main.storyboard index 6596fe8..3af57fb 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/Base.lproj/Main.storyboard +++ b/Project/CSStickyHeaderFlowLayoutDemo/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -286,7 +286,7 @@ - + diff --git a/Project/CSStickyHeaderFlowLayoutDemo/CSLockedHeaderViewController.m b/Project/CSStickyHeaderFlowLayoutDemo/CSLockedHeaderViewController.m index b4b8c2e..d718350 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/CSLockedHeaderViewController.m +++ b/Project/CSStickyHeaderFlowLayoutDemo/CSLockedHeaderViewController.m @@ -23,14 +23,7 @@ @implementation CSLockedHeaderViewController - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { - self.sections = @[ - @{@"Twitter":@"http://twitter.com"}, - @{@"Facebook":@"http://facebook.com"}, - @{@"Tumblr":@"http://tumblr.com"}, - @{@"Pinterest":@"http://pinterest.com"}, - @{@"Instagram":@"http://instagram.com"}, - @{@"Github":@"http://github.com"}, - ]; + self.sections = @[]; self.headerNib = [UINib nibWithNibName:@"CSSearchBarHeader" bundle:nil]; } @@ -50,6 +43,67 @@ - (void)viewDidLoad forSupplementaryViewOfKind:CSStickyHeaderParallaxHeader withReuseIdentifier:@"header"]; + UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStylePlain target:self action:@selector(add:)]; + self.navigationItem.rightBarButtonItem = add; + + [self add:nil]; + +} + +- (void)add:(id)sender +{ +// NSArray *new = @[ +// @{@"Twitter":@"http://twitter.com"}, +// @{@"Facebook":@"http://facebook.com"}, +// @{@"Tumblr":@"http://tumblr.com"}, +// @{@"Pinterest":@"http://pinterest.com"}, +// @{@"Instagram":@"http://instagram.com"}, +// @{@"Github":@"http://github.com"}, +// @{@"Twitter":@"http://twitter.com"}, +// @{@"Facebook":@"http://facebook.com"}, +// @{@"Tumblr":@"http://tumblr.com"}, +// @{@"Pinterest":@"http://pinterest.com"}, +// @{@"Instagram":@"http://instagram.com"}, +// @{@"Github":@"http://github.com"}, +// ]; +// self.sections = [self.sections arrayByAddingObjectsFromArray:new]; +// [self.collectionView reloadData]; + + [self.collectionView performBatchUpdates:^{ + + NSArray *new = @[ + @{@"Twitter":@"http://twitter.com"}, + @{@"Facebook":@"http://facebook.com"}, + @{@"Tumblr":@"http://tumblr.com"}, + @{@"Pinterest":@"http://pinterest.com"}, + @{@"Instagram":@"http://instagram.com"}, + @{@"Github":@"http://github.com"}, + @{@"Twitter":@"http://twitter.com"}, + @{@"Facebook":@"http://facebook.com"}, + @{@"Tumblr":@"http://tumblr.com"}, + @{@"Pinterest":@"http://pinterest.com"}, + @{@"Instagram":@"http://instagram.com"}, + @{@"Github":@"http://github.com"}, + ]; + self.sections = [self.sections arrayByAddingObjectsFromArray:new]; + + NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; + NSMutableArray *indexPaths = [NSMutableArray array]; + + int startIndex = 0; + + [new enumerateObjectsUsingBlock:^(NSDictionary *item, NSUInteger idx, BOOL *stop) { + NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:startIndex + idx]; + [indexPaths addObject:indexPath]; + + [set addIndex:startIndex + idx]; + + }]; + + [self.collectionView insertSections:set]; + [self.collectionView insertItemsAtIndexPaths:indexPaths]; + } completion:nil]; + } - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { @@ -113,6 +167,10 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView return nil; } +#pragma mark UICollectionViewDataSource +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + NSLog(@"hit test"); +} @end diff --git a/Project/CSStickyHeaderFlowLayoutDemo/CSParallaxHeaderViewController.m b/Project/CSStickyHeaderFlowLayoutDemo/CSParallaxHeaderViewController.m index cf16999..029b02b 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/CSParallaxHeaderViewController.m +++ b/Project/CSStickyHeaderFlowLayoutDemo/CSParallaxHeaderViewController.m @@ -11,6 +11,10 @@ #import "CSSectionHeader.h" #import "CSStickyHeaderFlowLayout.h" +#ifdef DEBUG_PULL_TO_REFRESH +#import "MyPulling.h" +#endif + @interface CSParallaxHeaderViewController () @property (nonatomic, strong) NSArray *sections; @@ -45,8 +49,20 @@ - (void)viewDidLoad [self.collectionView registerNib:self.headerNib forSupplementaryViewOfKind:CSStickyHeaderParallaxHeader withReuseIdentifier:@"header"]; - + +#ifdef DEBUG_PULL_TO_REFRESH + self.collectionView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0); + self.collectionView.scrollIndicatorInsets = UIEdgeInsetsMake(64, 0, 0, 0); + MyPulling *pulling = [[MyPulling alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 54)]; + [self.collectionView addSubview:pulling]; +#endif +} + +#ifdef DEBUG_PULL_TO_REFRESH +- (BOOL)automaticallyAdjustsScrollViewInsets { + return false; } +#endif - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self reloadLayout]; @@ -113,5 +129,10 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView return nil; } +#pragma mark UICollectionViewDataSource + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + NSLog(@"hit test"); +} @end diff --git a/Project/CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Info.plist b/Project/CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Info.plist index f66d10a..0193695 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Info.plist +++ b/Project/CSStickyHeaderFlowLayoutDemo/CSStickyHeaderFlowLayoutDemo-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.jamztang.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json index a396706..33ec0bc 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json @@ -14,6 +14,11 @@ "idiom" : "iphone", "size" : "60x60", "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" } ], "info" : { diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-blur.imageset/Contents.json b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-blur.imageset/Contents.json index cb99bf2..6e18166 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-blur.imageset/Contents.json +++ b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-blur.imageset/Contents.json @@ -2,12 +2,16 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "baby-blur.png" + "filename" : "baby-blur.png", + "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-clear.imageset/Contents.json b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-clear.imageset/Contents.json index 5d9a31d..3c63e39 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-clear.imageset/Contents.json +++ b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/baby-clear.imageset/Contents.json @@ -2,12 +2,16 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "baby-clear.png" + "filename" : "baby-clear.png", + "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/bbb.imageset/Contents.json b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/bbb.imageset/Contents.json new file mode 100644 index 0000000..e5c19ab --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/bbb.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "bbb.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/bbb.imageset/bbb.png b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/bbb.imageset/bbb.png new file mode 100644 index 0000000..33bbad4 Binary files /dev/null and b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/bbb.imageset/bbb.png differ diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/border.imageset/Contents.json b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/border.imageset/Contents.json index 8065740..d1524d2 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/border.imageset/Contents.json +++ b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/border.imageset/Contents.json @@ -37,6 +37,10 @@ "idiom" : "universal", "filename" : "border@2x.png", "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/success-baby.imageset/Contents.json b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/success-baby.imageset/Contents.json index 1014730..c79515f 100644 --- a/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/success-baby.imageset/Contents.json +++ b/Project/CSStickyHeaderFlowLayoutDemo/Images.xcassets/success-baby.imageset/Contents.json @@ -2,12 +2,16 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "success-baby.png" + "filename" : "success-baby.png", + "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Project/CSStickyHeaderFlowLayoutDemo/MyPulling.h b/Project/CSStickyHeaderFlowLayoutDemo/MyPulling.h new file mode 100644 index 0000000..828369b --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutDemo/MyPulling.h @@ -0,0 +1,5 @@ +#import + +@interface MyPulling : UIView + +@end diff --git a/Project/CSStickyHeaderFlowLayoutDemo/MyPulling.m b/Project/CSStickyHeaderFlowLayoutDemo/MyPulling.m new file mode 100644 index 0000000..bec8281 --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutDemo/MyPulling.m @@ -0,0 +1,90 @@ +// From issue #85 https://github.com/kyfxbl/CollectionViewAnimationProblem reported by @kyfxbl + +#import "MyPulling.h" + +@implementation MyPulling + +{ + UIScrollView *_scrollView; + UILabel *label; + UIEdgeInsets _originalInsets; +} + +-(instancetype) initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if(self){ + + label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 375, 54)]; + label.text = @"pulling"; + + [self addSubview:label]; + } + + return self; +} + +-(void) willMoveToSuperview:(UIView *)newSuperview +{ + + CGRect frame = self.frame; + frame.origin.y = -54; + self.frame = frame; + + + _scrollView = (UIScrollView *)newSuperview; + + _scrollView.alwaysBounceVertical = YES; + _originalInsets = _scrollView.contentInset; + NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld; + [_scrollView addObserver:self forKeyPath:@"contentOffset" options:options context:nil]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([keyPath isEqualToString:@"contentOffset"]) { + [self scrollViewContentOffsetDidChange:change]; + } +} + +-(void) scrollViewContentOffsetDidChange:(NSDictionary*)change +{ + label.text = [NSString stringWithFormat:@"%f", _scrollView.contentOffset.y]; + + if(_scrollView.contentOffset.y >= -100){ + return; + } + + if(_scrollView.isDragging){ + return; + } + + [self refresh]; +} + +-(void) refresh +{ + + [UIView animateWithDuration:0.3f + animations:^{ + + // increase contentInset by 54, for pulling component + + UIEdgeInsets inset = _scrollView.contentInset; + inset.top = _originalInsets.top + self.frame.size.height; + _scrollView.contentInset = inset; + + } completion:^(BOOL finished) { +// + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 1), dispatch_get_main_queue(), ^{ + + [UIView animateWithDuration:0.4 animations:^{ + + _scrollView.contentInset = _originalInsets; + + } completion:nil]; + }); + }]; +} + +@end diff --git a/Project/CSStickyHeaderFlowLayoutDemoTests/CSStickyHeaderFlowLayoutDemoTests-Info.plist b/Project/CSStickyHeaderFlowLayoutDemoTests/CSStickyHeaderFlowLayoutDemoTests-Info.plist index eca95e4..169b6f7 100644 --- a/Project/CSStickyHeaderFlowLayoutDemoTests/CSStickyHeaderFlowLayoutDemoTests-Info.plist +++ b/Project/CSStickyHeaderFlowLayoutDemoTests/CSStickyHeaderFlowLayoutDemoTests-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.jamztang.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/Project/CSStickyHeaderFlowLayoutTests/CSStickyHeaderFlowLayoutTests.swift b/Project/CSStickyHeaderFlowLayoutTests/CSStickyHeaderFlowLayoutTests.swift new file mode 100644 index 0000000..7bd858e --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutTests/CSStickyHeaderFlowLayoutTests.swift @@ -0,0 +1,36 @@ +// +// CSStickyHeaderFlowLayoutTests.swift +// CSStickyHeaderFlowLayoutTests +// +// Created by James Tang on 16/7/15. +// Copyright (c) 2015 Jamz Tang. All rights reserved. +// + +import UIKit +import XCTest + +class CSStickyHeaderFlowLayoutTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measureBlock() { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Project/CSStickyHeaderFlowLayoutTests/Info.plist b/Project/CSStickyHeaderFlowLayoutTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Project/CSStickyHeaderFlowLayoutTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Project/Podfile b/Project/Podfile index 68e46c3..aca0175 100644 --- a/Project/Podfile +++ b/Project/Podfile @@ -1,2 +1,2 @@ platform :ios, '7.0' -pod "CSStickyHeaderFlowLayout", :path => "../CSStickyHeaderFlowLayout.podspec" +pod "CSStickyHeaderFlowLayout", :path => "../" diff --git a/Project/Podfile.lock b/Project/Podfile.lock index af94378..e838b82 100644 --- a/Project/Podfile.lock +++ b/Project/Podfile.lock @@ -1,14 +1,14 @@ PODS: - - CSStickyHeaderFlowLayout (0.2) + - CSStickyHeaderFlowLayout (0.2.10) DEPENDENCIES: - - CSStickyHeaderFlowLayout (from `../CSStickyHeaderFlowLayout.podspec`) + - CSStickyHeaderFlowLayout (from `../`) EXTERNAL SOURCES: CSStickyHeaderFlowLayout: - :path: ../CSStickyHeaderFlowLayout.podspec + :path: "../" SPEC CHECKSUMS: - CSStickyHeaderFlowLayout: 5e0e35f042c14b24758430c3be234525526e631d + CSStickyHeaderFlowLayout: 5366582779d8b7c9ba9b9cc729c218cc23888776 -COCOAPODS: 0.32.1 +COCOAPODS: 0.38.2 diff --git a/Project/Pods/BuildHeaders/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h b/Project/Pods/BuildHeaders/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h deleted file mode 120000 index 873cea1..0000000 --- a/Project/Pods/BuildHeaders/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Classes/CSStickyHeaderFlowLayout.h \ No newline at end of file diff --git a/Project/Pods/BuildHeaders/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h b/Project/Pods/BuildHeaders/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h deleted file mode 120000 index f9eb997..0000000 --- a/Project/Pods/BuildHeaders/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Classes/CSStickyHeaderFlowLayoutAttributes.h \ No newline at end of file diff --git a/Project/Pods/Headers/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h b/Project/Pods/Headers/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h deleted file mode 120000 index 873cea1..0000000 --- a/Project/Pods/Headers/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Classes/CSStickyHeaderFlowLayout.h \ No newline at end of file diff --git a/Project/Pods/Headers/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h b/Project/Pods/Headers/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h deleted file mode 120000 index f9eb997..0000000 --- a/Project/Pods/Headers/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Classes/CSStickyHeaderFlowLayoutAttributes.h \ No newline at end of file diff --git a/Project/Pods/Headers/Private/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h b/Project/Pods/Headers/Private/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h new file mode 120000 index 0000000..bf691a1 --- /dev/null +++ b/Project/Pods/Headers/Private/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h @@ -0,0 +1 @@ +../../../../../Classes/CSStickyHeaderFlowLayout.h \ No newline at end of file diff --git a/Project/Pods/Headers/Private/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h b/Project/Pods/Headers/Private/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h new file mode 120000 index 0000000..d8b323e --- /dev/null +++ b/Project/Pods/Headers/Private/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h @@ -0,0 +1 @@ +../../../../../Classes/CSStickyHeaderFlowLayoutAttributes.h \ No newline at end of file diff --git a/Project/Pods/Headers/Public/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h b/Project/Pods/Headers/Public/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h new file mode 120000 index 0000000..bf691a1 --- /dev/null +++ b/Project/Pods/Headers/Public/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.h @@ -0,0 +1 @@ +../../../../../Classes/CSStickyHeaderFlowLayout.h \ No newline at end of file diff --git a/Project/Pods/Headers/Public/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h b/Project/Pods/Headers/Public/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h new file mode 120000 index 0000000..d8b323e --- /dev/null +++ b/Project/Pods/Headers/Public/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayoutAttributes.h @@ -0,0 +1 @@ +../../../../../Classes/CSStickyHeaderFlowLayoutAttributes.h \ No newline at end of file diff --git a/Project/Pods/Local Podspecs/CSStickyHeaderFlowLayout.podspec b/Project/Pods/Local Podspecs/CSStickyHeaderFlowLayout.podspec deleted file mode 100644 index 28660b9..0000000 --- a/Project/Pods/Local Podspecs/CSStickyHeaderFlowLayout.podspec +++ /dev/null @@ -1,20 +0,0 @@ -Pod::Spec.new do |s| - s.name = "CSStickyHeaderFlowLayout" - s.version = "0.2" - s.summary = "Parallax and Sticky header done right using UICollectionViewLayout" - s.description = <<-DESC - UICollectionView are flexible and you can use supplementary views to - anything you wanted. - DESC - s.homepage = "http://github.com/jamztang/CSStickyHeaderFlowLayout" - s.screenshots = "https://d262ilb51hltx0.cloudfront.net/max/800/1*pev9ZXJAZ2MYoF8-R_nbRA.gif" - s.license = 'MIT' - s.author = { "James Tang" => "j@jamztang.com" } - s.source = { :git => "https://github.com/jamztang/CSStickyHeaderFlowLayout.git", :tag => s.version.to_s } - s.platform = :ios, '7.0' - s.ios.deployment_target = '7.0' - s.requires_arc = true - s.source_files = 'Classes' - s.ios.exclude_files = 'Classes/osx' - s.osx.exclude_files = 'Classes/ios' -end diff --git a/Project/Pods/Local Podspecs/CSStickyHeaderFlowLayout.podspec.json b/Project/Pods/Local Podspecs/CSStickyHeaderFlowLayout.podspec.json new file mode 100644 index 0000000..3f9d251 --- /dev/null +++ b/Project/Pods/Local Podspecs/CSStickyHeaderFlowLayout.podspec.json @@ -0,0 +1,27 @@ +{ + "name": "CSStickyHeaderFlowLayout", + "version": "0.2.10", + "summary": "Parallax and Sticky header done right using UICollectionViewLayout", + "description": "UICollectionView are flexible and you can use supplementary views to\nanything you wanted.", + "homepage": "http://github.com/jamztang/CSStickyHeaderFlowLayout", + "screenshots": "https://d262ilb51hltx0.cloudfront.net/max/800/1*pev9ZXJAZ2MYoF8-R_nbRA.gif", + "license": "MIT", + "authors": { + "James Tang": "j@jamztang.com" + }, + "source": { + "git": "https://github.com/jamztang/CSStickyHeaderFlowLayout.git", + "tag": "0.2.10" + }, + "platforms": { + "ios": "7.0" + }, + "requires_arc": true, + "source_files": "Classes", + "ios": { + "exclude_files": "Classes/osx" + }, + "osx": { + "exclude_files": "Classes/ios" + } +} diff --git a/Project/Pods/Manifest.lock b/Project/Pods/Manifest.lock index af94378..e838b82 100644 --- a/Project/Pods/Manifest.lock +++ b/Project/Pods/Manifest.lock @@ -1,14 +1,14 @@ PODS: - - CSStickyHeaderFlowLayout (0.2) + - CSStickyHeaderFlowLayout (0.2.10) DEPENDENCIES: - - CSStickyHeaderFlowLayout (from `../CSStickyHeaderFlowLayout.podspec`) + - CSStickyHeaderFlowLayout (from `../`) EXTERNAL SOURCES: CSStickyHeaderFlowLayout: - :path: ../CSStickyHeaderFlowLayout.podspec + :path: "../" SPEC CHECKSUMS: - CSStickyHeaderFlowLayout: 5e0e35f042c14b24758430c3be234525526e631d + CSStickyHeaderFlowLayout: 5366582779d8b7c9ba9b9cc729c218cc23888776 -COCOAPODS: 0.32.1 +COCOAPODS: 0.38.2 diff --git a/Project/Pods/Pods-CSStickyHeaderFlowLayout-Private.xcconfig b/Project/Pods/Pods-CSStickyHeaderFlowLayout-Private.xcconfig deleted file mode 100644 index bd328dd..0000000 --- a/Project/Pods/Pods-CSStickyHeaderFlowLayout-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-CSStickyHeaderFlowLayout.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/CSStickyHeaderFlowLayout" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/CSStickyHeaderFlowLayout" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Project/Pods/Pods-CSStickyHeaderFlowLayout-dummy.m b/Project/Pods/Pods-CSStickyHeaderFlowLayout-dummy.m deleted file mode 100644 index e9c00bd..0000000 --- a/Project/Pods/Pods-CSStickyHeaderFlowLayout-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_CSStickyHeaderFlowLayout : NSObject -@end -@implementation PodsDummy_Pods_CSStickyHeaderFlowLayout -@end diff --git a/Project/Pods/Pods-environment.h b/Project/Pods/Pods-environment.h deleted file mode 100644 index 4209c4c..0000000 --- a/Project/Pods/Pods-environment.h +++ /dev/null @@ -1,14 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// CSStickyHeaderFlowLayout -#define COCOAPODS_POD_AVAILABLE_CSStickyHeaderFlowLayout -#define COCOAPODS_VERSION_MAJOR_CSStickyHeaderFlowLayout 0 -#define COCOAPODS_VERSION_MINOR_CSStickyHeaderFlowLayout 2 -#define COCOAPODS_VERSION_PATCH_CSStickyHeaderFlowLayout 0 - diff --git a/Project/Pods/Pods.xcconfig b/Project/Pods/Pods.xcconfig deleted file mode 100644 index cbac0c6..0000000 --- a/Project/Pods/Pods.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/CSStickyHeaderFlowLayout" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/CSStickyHeaderFlowLayout" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Project/Pods/Pods.xcodeproj/project.pbxproj b/Project/Pods/Pods.xcodeproj/project.pbxproj index 5f29cb6..e44e841 100644 --- a/Project/Pods/Pods.xcodeproj/project.pbxproj +++ b/Project/Pods/Pods.xcodeproj/project.pbxproj @@ -7,271 +7,281 @@ objects = { /* Begin PBXBuildFile section */ - 0A59D6CEF108451D8563B813 /* CSStickyHeaderFlowLayoutAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A941A75B4A4F6E8DD6801C /* CSStickyHeaderFlowLayoutAttributes.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 3FF23B9221E345CA8C1B1390 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FABA9C4FAB647B6A18A71D0 /* Pods-dummy.m */; }; - 714FBDF150484CA083DEC45D /* Pods-CSStickyHeaderFlowLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25604ACC506D4D66993F3724 /* Pods-CSStickyHeaderFlowLayout-dummy.m */; }; - 8EF2FBAB25F144CF85F4960F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 713B8DC3119D4794AB44ABEC /* Foundation.framework */; }; - 9A72057D9D65447B8B634715 /* CSStickyHeaderFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = DB032036729B4492B8C52A5C /* CSStickyHeaderFlowLayout.h */; }; - AE9F442935424332A78562DF /* CSStickyHeaderFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 75B6647B7019414F9EF94D61 /* CSStickyHeaderFlowLayout.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - DAEC0C7E04D74C329939F98E /* CSStickyHeaderFlowLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AFE4928C58402884E4AD28 /* CSStickyHeaderFlowLayoutAttributes.h */; }; - E507EF4E087A4858A5BF4D3C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 713B8DC3119D4794AB44ABEC /* Foundation.framework */; }; - E8C3FB951E5E44C78B7B9D32 /* libPods-CSStickyHeaderFlowLayout.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 490AD146D1BE446A8B9A9761 /* libPods-CSStickyHeaderFlowLayout.a */; }; + 4939C1D302428B8AA4D845AA6649315E /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D977BFC33FB2277A3AEDEC48FFCA2079 /* Pods-dummy.m */; }; + 718CC17A4811A1C529658991CE1529D8 /* CSStickyHeaderFlowLayoutAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = C9DF42FC14C22B3814DB7EFD04400F8E /* CSStickyHeaderFlowLayoutAttributes.m */; }; + 90B7D3BC05B6326BE1ACC8369BC4BA9E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5001DE7E6DBAEB117E72A32A567B30E0 /* Foundation.framework */; }; + BF1B5F9C0B8C15493A888378DB06E099 /* CSStickyHeaderFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 59912E49FAEB9F1FC77C22957EE88582 /* CSStickyHeaderFlowLayout.m */; }; + C6840549AF89761FFC581FBB8197A427 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5001DE7E6DBAEB117E72A32A567B30E0 /* Foundation.framework */; }; + CD23ACA14536749C7672FE1FCE60A7D6 /* CSStickyHeaderFlowLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = C101ADFA653BE696B6288259608E1BC6 /* CSStickyHeaderFlowLayoutAttributes.h */; }; + D76182056CC6BB8DED186CF4EBD28CDA /* CSStickyHeaderFlowLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF0A77C3567C8B48155BFDE19ABC20C /* CSStickyHeaderFlowLayout-dummy.m */; }; + E9BB7C82CE2329FA219E4422CE95B464 /* CSStickyHeaderFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 1257CE923430D3E27D1157DCBCF77FD3 /* CSStickyHeaderFlowLayout.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - D7BB7AE49800486496BC32C9 /* PBXContainerItemProxy */ = { + 169C3A6CF1ED7AC1ADCA5B3DE678753D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 7C2CFC6C02C2442B8A92858E /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 37C2118D2A5945A0814CE759; - remoteInfo = "Pods-CSStickyHeaderFlowLayout"; + remoteGlobalIDString = 32CF90DBE2A4842932209237BC634C11; + remoteInfo = CSStickyHeaderFlowLayout; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 07AFE4928C58402884E4AD28 /* CSStickyHeaderFlowLayoutAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSStickyHeaderFlowLayoutAttributes.h; path = Classes/CSStickyHeaderFlowLayoutAttributes.h; sourceTree = ""; }; - 0D35EA507117427D8459287E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 25604ACC506D4D66993F3724 /* Pods-CSStickyHeaderFlowLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CSStickyHeaderFlowLayout-dummy.m"; sourceTree = ""; }; - 3F3756184AE44A70943F57F1 /* Pods-CSStickyHeaderFlowLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CSStickyHeaderFlowLayout-prefix.pch"; sourceTree = ""; }; - 490AD146D1BE446A8B9A9761 /* libPods-CSStickyHeaderFlowLayout.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CSStickyHeaderFlowLayout.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4FABA9C4FAB647B6A18A71D0 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 5B5D5E8BC6B14B64B412A7A3 /* Pods-CSStickyHeaderFlowLayout-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CSStickyHeaderFlowLayout-Private.xcconfig"; sourceTree = ""; }; - 6AB0F2D8B597408EB3CCBB3F /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - 713B8DC3119D4794AB44ABEC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 75B6647B7019414F9EF94D61 /* CSStickyHeaderFlowLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSStickyHeaderFlowLayout.m; path = Classes/CSStickyHeaderFlowLayout.m; sourceTree = ""; }; - 79E9D987933442C78BE3DE31 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.xcconfig; sourceTree = ""; }; - 7CCA8073E47B46C6BC2CCA0F /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 8125A63A044B4C37A50B4D02 /* Pods-CSStickyHeaderFlowLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CSStickyHeaderFlowLayout.xcconfig"; sourceTree = ""; }; - 820956E6F64148B18873C6FE /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 8B0DAFB8CE43461091EA0FD6 /* Pods-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-environment.h"; sourceTree = ""; }; - 92378A2F3F8F413FA3B7AE3E /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - DB032036729B4492B8C52A5C /* CSStickyHeaderFlowLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSStickyHeaderFlowLayout.h; path = Classes/CSStickyHeaderFlowLayout.h; sourceTree = ""; }; - F9A941A75B4A4F6E8DD6801C /* CSStickyHeaderFlowLayoutAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSStickyHeaderFlowLayoutAttributes.m; path = Classes/CSStickyHeaderFlowLayoutAttributes.m; sourceTree = ""; }; + 07836F93A318AB1B5D363BBB30E562AD /* CSStickyHeaderFlowLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CSStickyHeaderFlowLayout-prefix.pch"; sourceTree = ""; }; + 1257CE923430D3E27D1157DCBCF77FD3 /* CSStickyHeaderFlowLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CSStickyHeaderFlowLayout.h; sourceTree = ""; }; + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + 2A105B12EA2A2F16B544420D6D486581 /* libCSStickyHeaderFlowLayout.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCSStickyHeaderFlowLayout.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5001DE7E6DBAEB117E72A32A567B30E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 59912E49FAEB9F1FC77C22957EE88582 /* CSStickyHeaderFlowLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CSStickyHeaderFlowLayout.m; sourceTree = ""; }; + 62BC0F6B182FE98FFA3CA86787062EF1 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + 7FF0A77C3567C8B48155BFDE19ABC20C /* CSStickyHeaderFlowLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CSStickyHeaderFlowLayout-dummy.m"; sourceTree = ""; }; + 96E0C6AF1C624380CE9421A24E761FD4 /* CSStickyHeaderFlowLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CSStickyHeaderFlowLayout.xcconfig; sourceTree = ""; }; + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + C101ADFA653BE696B6288259608E1BC6 /* CSStickyHeaderFlowLayoutAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CSStickyHeaderFlowLayoutAttributes.h; sourceTree = ""; }; + C9DF42FC14C22B3814DB7EFD04400F8E /* CSStickyHeaderFlowLayoutAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CSStickyHeaderFlowLayoutAttributes.m; sourceTree = ""; }; + CC7D496BDE63E8D94E22B7817AD9A268 /* CSStickyHeaderFlowLayout-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "CSStickyHeaderFlowLayout-Private.xcconfig"; sourceTree = ""; }; + D977BFC33FB2277A3AEDEC48FFCA2079 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + E256BC23DED73FB12167274A29383CB2 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + E8E49AD5F42BB54B641C041AF44A5760 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - D18F5397D2DB4FB08B3E1A57 /* Frameworks */ = { + 0C3AD088E4FF32DE0DCCC24F189646F4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E507EF4E087A4858A5BF4D3C /* Foundation.framework in Frameworks */, + C6840549AF89761FFC581FBB8197A427 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E5314F64E9494BFD813C86A5 /* Frameworks */ = { + 794A06816DE179D23431D33B8172D958 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8EF2FBAB25F144CF85F4960F /* Foundation.framework in Frameworks */, - E8C3FB951E5E44C78B7B9D32 /* libPods-CSStickyHeaderFlowLayout.a in Frameworks */, + 90B7D3BC05B6326BE1ACC8369BC4BA9E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 04EA439F693A43FBA8ABE981 /* Frameworks */ = { + 410698420A66B648363A45E76517BBEE /* Development Pods */ = { isa = PBXGroup; children = ( - 057F96589E99408C859C6BAA /* iOS */, + F80AFA9A1107ED5A27D10E2E7DAAEFBE /* CSStickyHeaderFlowLayout */, ); - name = Frameworks; + name = "Development Pods"; sourceTree = ""; }; - 057F96589E99408C859C6BAA /* iOS */ = { + 53F661C0CA7190D2CF05023FB33D61E4 /* iOS */ = { isa = PBXGroup; children = ( - 713B8DC3119D4794AB44ABEC /* Foundation.framework */, + 5001DE7E6DBAEB117E72A32A567B30E0 /* Foundation.framework */, ); name = iOS; sourceTree = ""; }; - 1A63D437298E4E0A821565A4 /* Targets Support Files */ = { + 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( - F9713BD48544483DB5E6C673 /* Pods */, + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + 410698420A66B648363A45E76517BBEE /* Development Pods */, + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, ); - name = "Targets Support Files"; sourceTree = ""; }; - 241154DAB53C479899AB3627 = { + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { isa = PBXGroup; children = ( - 820956E6F64148B18873C6FE /* Podfile */, - 2B85732ACE5E4E6285BF0E05 /* Development Pods */, - 04EA439F693A43FBA8ABE981 /* Frameworks */, - 334079BA8CF5435887E752E3 /* Products */, - 1A63D437298E4E0A821565A4 /* Targets Support Files */, + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, + D977BFC33FB2277A3AEDEC48FFCA2079 /* Pods-dummy.m */, + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, + 62BC0F6B182FE98FFA3CA86787062EF1 /* Pods.debug.xcconfig */, + E8E49AD5F42BB54B641C041AF44A5760 /* Pods.release.xcconfig */, ); + name = Pods; + path = "Target Support Files/Pods"; sourceTree = ""; }; - 2B85732ACE5E4E6285BF0E05 /* Development Pods */ = { + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { isa = PBXGroup; children = ( - 8F165D735663455E9D2ED837 /* CSStickyHeaderFlowLayout */, + 53F661C0CA7190D2CF05023FB33D61E4 /* iOS */, ); - name = "Development Pods"; + name = Frameworks; sourceTree = ""; }; - 334079BA8CF5435887E752E3 /* Products */ = { + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { isa = PBXGroup; children = ( - 0D35EA507117427D8459287E /* libPods.a */, - 490AD146D1BE446A8B9A9761 /* libPods-CSStickyHeaderFlowLayout.a */, + 2A105B12EA2A2F16B544420D6D486581 /* libCSStickyHeaderFlowLayout.a */, + E256BC23DED73FB12167274A29383CB2 /* libPods.a */, ); name = Products; sourceTree = ""; }; - 8D207585B6C14EE198881366 /* Support Files */ = { + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 8125A63A044B4C37A50B4D02 /* Pods-CSStickyHeaderFlowLayout.xcconfig */, - 5B5D5E8BC6B14B64B412A7A3 /* Pods-CSStickyHeaderFlowLayout-Private.xcconfig */, - 25604ACC506D4D66993F3724 /* Pods-CSStickyHeaderFlowLayout-dummy.m */, - 3F3756184AE44A70943F57F1 /* Pods-CSStickyHeaderFlowLayout-prefix.pch */, + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, ); - name = "Support Files"; - sourceTree = SOURCE_ROOT; + name = "Targets Support Files"; + sourceTree = ""; + }; + DA0CD6575CEDE7061087F70461B13B42 /* Classes */ = { + isa = PBXGroup; + children = ( + 1257CE923430D3E27D1157DCBCF77FD3 /* CSStickyHeaderFlowLayout.h */, + 59912E49FAEB9F1FC77C22957EE88582 /* CSStickyHeaderFlowLayout.m */, + C101ADFA653BE696B6288259608E1BC6 /* CSStickyHeaderFlowLayoutAttributes.h */, + C9DF42FC14C22B3814DB7EFD04400F8E /* CSStickyHeaderFlowLayoutAttributes.m */, + ); + path = Classes; + sourceTree = ""; }; - 8F165D735663455E9D2ED837 /* CSStickyHeaderFlowLayout */ = { + F80AFA9A1107ED5A27D10E2E7DAAEFBE /* CSStickyHeaderFlowLayout */ = { isa = PBXGroup; children = ( - DB032036729B4492B8C52A5C /* CSStickyHeaderFlowLayout.h */, - 75B6647B7019414F9EF94D61 /* CSStickyHeaderFlowLayout.m */, - 07AFE4928C58402884E4AD28 /* CSStickyHeaderFlowLayoutAttributes.h */, - F9A941A75B4A4F6E8DD6801C /* CSStickyHeaderFlowLayoutAttributes.m */, - 8D207585B6C14EE198881366 /* Support Files */, + DA0CD6575CEDE7061087F70461B13B42 /* Classes */, + FC99B6419D37394393040CCFB4F45C5D /* Support Files */, ); name = CSStickyHeaderFlowLayout; path = ../..; sourceTree = ""; }; - F9713BD48544483DB5E6C673 /* Pods */ = { + FC99B6419D37394393040CCFB4F45C5D /* Support Files */ = { isa = PBXGroup; children = ( - 79E9D987933442C78BE3DE31 /* Pods.xcconfig */, - 92378A2F3F8F413FA3B7AE3E /* Pods-acknowledgements.markdown */, - 6AB0F2D8B597408EB3CCBB3F /* Pods-acknowledgements.plist */, - 4FABA9C4FAB647B6A18A71D0 /* Pods-dummy.m */, - 8B0DAFB8CE43461091EA0FD6 /* Pods-environment.h */, - 7CCA8073E47B46C6BC2CCA0F /* Pods-resources.sh */, + 96E0C6AF1C624380CE9421A24E761FD4 /* CSStickyHeaderFlowLayout.xcconfig */, + CC7D496BDE63E8D94E22B7817AD9A268 /* CSStickyHeaderFlowLayout-Private.xcconfig */, + 7FF0A77C3567C8B48155BFDE19ABC20C /* CSStickyHeaderFlowLayout-dummy.m */, + 07836F93A318AB1B5D363BBB30E562AD /* CSStickyHeaderFlowLayout-prefix.pch */, ); - name = Pods; + name = "Support Files"; + path = "Project/Pods/Target Support Files/CSStickyHeaderFlowLayout"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - E21B172293F1464BB4EA4115 /* Headers */ = { + DE5B0200C7F877527EC419BFBF2BCAC2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 9A72057D9D65447B8B634715 /* CSStickyHeaderFlowLayout.h in Headers */, - DAEC0C7E04D74C329939F98E /* CSStickyHeaderFlowLayoutAttributes.h in Headers */, + E9BB7C82CE2329FA219E4422CE95B464 /* CSStickyHeaderFlowLayout.h in Headers */, + CD23ACA14536749C7672FE1FCE60A7D6 /* CSStickyHeaderFlowLayoutAttributes.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 15EB5029B1524FC7B7B0A58A /* Pods */ = { + 2EAA1A1D205BF057B42AB5DE35ECFE03 /* Pods */ = { isa = PBXNativeTarget; - buildConfigurationList = 34E5431C66574A7F9E3561C6 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 54FCB8F6DEC70AD3A3D4051D92E2525D /* Build configuration list for PBXNativeTarget "Pods" */; buildPhases = ( - 5CFDD6DAF9E2497AA8763306 /* Sources */, - E5314F64E9494BFD813C86A5 /* Frameworks */, + B3CDA53154316A0AE01D4C7FC0D037D4 /* Sources */, + 794A06816DE179D23431D33B8172D958 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 465AEDCBB88E4F2F97DF15D0 /* PBXTargetDependency */, + 5A65E30016C21B89D229A375B73A21D3 /* PBXTargetDependency */, ); name = Pods; productName = Pods; - productReference = 0D35EA507117427D8459287E /* libPods.a */; + productReference = E256BC23DED73FB12167274A29383CB2 /* libPods.a */; productType = "com.apple.product-type.library.static"; }; - 37C2118D2A5945A0814CE759 /* Pods-CSStickyHeaderFlowLayout */ = { + 32CF90DBE2A4842932209237BC634C11 /* CSStickyHeaderFlowLayout */ = { isa = PBXNativeTarget; - buildConfigurationList = 912297E771DC472C8B7491C7 /* Build configuration list for PBXNativeTarget "Pods-CSStickyHeaderFlowLayout" */; + buildConfigurationList = 19BD00C3D95D47758DC7D1BAB83BFB7F /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayout" */; buildPhases = ( - 072E8031B741411BA7AD94E9 /* Sources */, - D18F5397D2DB4FB08B3E1A57 /* Frameworks */, - E21B172293F1464BB4EA4115 /* Headers */, + 3946CEA8E4418852132E21CD2CE79484 /* Sources */, + 0C3AD088E4FF32DE0DCCC24F189646F4 /* Frameworks */, + DE5B0200C7F877527EC419BFBF2BCAC2 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "Pods-CSStickyHeaderFlowLayout"; - productName = "Pods-CSStickyHeaderFlowLayout"; - productReference = 490AD146D1BE446A8B9A9761 /* libPods-CSStickyHeaderFlowLayout.a */; + name = CSStickyHeaderFlowLayout; + productName = CSStickyHeaderFlowLayout; + productReference = 2A105B12EA2A2F16B544420D6D486581 /* libCSStickyHeaderFlowLayout.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 7C2CFC6C02C2442B8A92858E /* Project object */ = { + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0630; + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; }; - buildConfigurationList = 4DBD17B3B66C4126B35A0E81 /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = 241154DAB53C479899AB3627; - productRefGroup = 334079BA8CF5435887E752E3 /* Products */; + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = CCA510CFBEA2D207524CDA0D73C3B561 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 15EB5029B1524FC7B7B0A58A /* Pods */, - 37C2118D2A5945A0814CE759 /* Pods-CSStickyHeaderFlowLayout */, + 32CF90DBE2A4842932209237BC634C11 /* CSStickyHeaderFlowLayout */, + 2EAA1A1D205BF057B42AB5DE35ECFE03 /* Pods */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 072E8031B741411BA7AD94E9 /* Sources */ = { + 3946CEA8E4418852132E21CD2CE79484 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AE9F442935424332A78562DF /* CSStickyHeaderFlowLayout.m in Sources */, - 0A59D6CEF108451D8563B813 /* CSStickyHeaderFlowLayoutAttributes.m in Sources */, - 714FBDF150484CA083DEC45D /* Pods-CSStickyHeaderFlowLayout-dummy.m in Sources */, + D76182056CC6BB8DED186CF4EBD28CDA /* CSStickyHeaderFlowLayout-dummy.m in Sources */, + BF1B5F9C0B8C15493A888378DB06E099 /* CSStickyHeaderFlowLayout.m in Sources */, + 718CC17A4811A1C529658991CE1529D8 /* CSStickyHeaderFlowLayoutAttributes.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5CFDD6DAF9E2497AA8763306 /* Sources */ = { + B3CDA53154316A0AE01D4C7FC0D037D4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3FF23B9221E345CA8C1B1390 /* Pods-dummy.m in Sources */, + 4939C1D302428B8AA4D845AA6649315E /* Pods-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 465AEDCBB88E4F2F97DF15D0 /* PBXTargetDependency */ = { + 5A65E30016C21B89D229A375B73A21D3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 37C2118D2A5945A0814CE759 /* Pods-CSStickyHeaderFlowLayout */; - targetProxy = D7BB7AE49800486496BC32C9 /* PBXContainerItemProxy */; + name = CSStickyHeaderFlowLayout; + target = 32CF90DBE2A4842932209237BC634C11 /* CSStickyHeaderFlowLayout */; + targetProxy = 169C3A6CF1ED7AC1ADCA5B3DE678753D /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 3B3E73B786D042D79E28C934 /* Release */ = { + 052A17875CB827423D627183396CEB60 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; @@ -279,9 +289,12 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; - COPY_PHASE_STRIP = NO; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -290,77 +303,51 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 416E8C8ED7F14AD98F24B1C2 /* Release */ = { + 1D627B7053A47BA5ECE88F862A8DEEEA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B5D5E8BC6B14B64B412A7A3 /* Pods-CSStickyHeaderFlowLayout-Private.xcconfig */; + baseConfigurationReference = CC7D496BDE63E8D94E22B7817AD9A268 /* CSStickyHeaderFlowLayout-Private.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-CSStickyHeaderFlowLayout-prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; }; name = Release; }; - 4AD6F39B15CD405DB19E64A0 /* Release */ = { + 3F7C21093C3458FFB9A157380A003F97 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79E9D987933442C78BE3DE31 /* Pods.xcconfig */; + baseConfigurationReference = CC7D496BDE63E8D94E22B7817AD9A268 /* CSStickyHeaderFlowLayout-Private.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; - OTHER_CFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); - OTHER_CPLUSPLUSFLAGS = ( - "-DNS_BLOCK_ASSERTIONS=1", - "$(inherited)", - ); + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 67E6F158E6C642F89214FEC6 /* Debug */ = { + B37F0F91F85060E28F1DAAB522DC7EC1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; @@ -368,7 +355,9 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; - COPY_PHASE_STRIP = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -386,59 +375,37 @@ IPHONEOS_DEPLOYMENT_TARGET = 7.0; ONLY_ACTIVE_ARCH = YES; STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; - 8BF8927BCBED4E34804C9803 /* Debug */ = { + BA689EE488AFB5C4C61B57BED665B985 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B5D5E8BC6B14B64B412A7A3 /* Pods-CSStickyHeaderFlowLayout-Private.xcconfig */; + baseConfigurationReference = E8E49AD5F42BB54B641C041AF44A5760 /* Pods.release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Pods-CSStickyHeaderFlowLayout-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + ENABLE_STRICT_OBJC_MSGSEND = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Debug; + name = Release; }; - BB40561CDD03496AB82A6877 /* Debug */ = { + C73E823B626A71316C4172A3B03DF294 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79E9D987933442C78BE3DE31 /* Pods.xcconfig */; + baseConfigurationReference = 62BC0F6B182FE98FFA3CA86787062EF1 /* Pods.debug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/xcodeproj.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + ENABLE_STRICT_OBJC_MSGSEND = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; @@ -447,34 +414,34 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 34E5431C66574A7F9E3561C6 /* Build configuration list for PBXNativeTarget "Pods" */ = { + 19BD00C3D95D47758DC7D1BAB83BFB7F /* Build configuration list for PBXNativeTarget "CSStickyHeaderFlowLayout" */ = { isa = XCConfigurationList; buildConfigurations = ( - BB40561CDD03496AB82A6877 /* Debug */, - 4AD6F39B15CD405DB19E64A0 /* Release */, + 3F7C21093C3458FFB9A157380A003F97 /* Debug */, + 1D627B7053A47BA5ECE88F862A8DEEEA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4DBD17B3B66C4126B35A0E81 /* Build configuration list for PBXProject "Pods" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 67E6F158E6C642F89214FEC6 /* Debug */, - 3B3E73B786D042D79E28C934 /* Release */, + B37F0F91F85060E28F1DAAB522DC7EC1 /* Debug */, + 052A17875CB827423D627183396CEB60 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 912297E771DC472C8B7491C7 /* Build configuration list for PBXNativeTarget "Pods-CSStickyHeaderFlowLayout" */ = { + 54FCB8F6DEC70AD3A3D4051D92E2525D /* Build configuration list for PBXNativeTarget "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8BF8927BCBED4E34804C9803 /* Debug */, - 416E8C8ED7F14AD98F24B1C2 /* Release */, + C73E823B626A71316C4172A3B03DF294 /* Debug */, + BA689EE488AFB5C4C61B57BED665B985 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 7C2CFC6C02C2442B8A92858E /* Project object */; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; } diff --git a/Project/Pods/Pods.xcodeproj/xcshareddata/xcschemes/CSStickyHeaderFlowLayout.xcscheme b/Project/Pods/Pods.xcodeproj/xcshareddata/xcschemes/CSStickyHeaderFlowLayout.xcscheme new file mode 100644 index 0000000..10ff8e7 --- /dev/null +++ b/Project/Pods/Pods.xcodeproj/xcshareddata/xcschemes/CSStickyHeaderFlowLayout.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-Private.xcconfig b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-Private.xcconfig new file mode 100644 index 0000000..7749a02 --- /dev/null +++ b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-Private.xcconfig @@ -0,0 +1,5 @@ +#include "CSStickyHeaderFlowLayout.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/CSStickyHeaderFlowLayout" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CSStickyHeaderFlowLayout" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-dummy.m b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-dummy.m new file mode 100644 index 0000000..91cc005 --- /dev/null +++ b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_CSStickyHeaderFlowLayout : NSObject +@end +@implementation PodsDummy_CSStickyHeaderFlowLayout +@end diff --git a/Project/Pods/Pods-CSStickyHeaderFlowLayout-prefix.pch b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-prefix.pch similarity index 62% rename from Project/Pods/Pods-CSStickyHeaderFlowLayout-prefix.pch rename to Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-prefix.pch index 95cf11d..aa992a4 100644 --- a/Project/Pods/Pods-CSStickyHeaderFlowLayout-prefix.pch +++ b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/Project/Pods/Pods-CSStickyHeaderFlowLayout.xcconfig b/Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.xcconfig similarity index 100% rename from Project/Pods/Pods-CSStickyHeaderFlowLayout.xcconfig rename to Project/Pods/Target Support Files/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout.xcconfig diff --git a/Project/Pods/Pods-acknowledgements.markdown b/Project/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown similarity index 95% rename from Project/Pods/Pods-acknowledgements.markdown rename to Project/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown index 288b69e..af2fca3 100644 --- a/Project/Pods/Pods-acknowledgements.markdown +++ b/Project/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -3,7 +3,7 @@ This application makes use of the following third party libraries: ## CSStickyHeaderFlowLayout -Copyright (c) 2014 Jamz Tang +Copyright (c) 2014-2015 James Tang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Project/Pods/Pods-acknowledgements.plist b/Project/Pods/Target Support Files/Pods/Pods-acknowledgements.plist similarity index 96% rename from Project/Pods/Pods-acknowledgements.plist rename to Project/Pods/Target Support Files/Pods/Pods-acknowledgements.plist index 0337d6f..05fd7b2 100644 --- a/Project/Pods/Pods-acknowledgements.plist +++ b/Project/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -14,7 +14,7 @@ FooterText - Copyright (c) 2014 Jamz Tang <jamz@jamztang.com> + Copyright (c) 2014-2015 James Tang <j@jamztang.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Project/Pods/Pods-dummy.m b/Project/Pods/Target Support Files/Pods/Pods-dummy.m similarity index 100% rename from Project/Pods/Pods-dummy.m rename to Project/Pods/Target Support Files/Pods/Pods-dummy.m diff --git a/Project/Pods/Pods-resources.sh b/Project/Pods/Target Support Files/Pods/Pods-resources.sh similarity index 61% rename from Project/Pods/Pods-resources.sh rename to Project/Pods/Target Support Files/Pods/Pods-resources.sh index 39c2549..ea685a2 100755 --- a/Project/Pods/Pods-resources.sh +++ b/Project/Pods/Target Support Files/Pods/Pods-resources.sh @@ -1,9 +1,19 @@ #!/bin/sh set -e +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" +XCASSET_FILES=() + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + install_resource() { case $1 in @@ -12,7 +22,7 @@ install_resource() ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) @@ -29,7 +39,13 @@ install_resource() echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" ;; + *.xcmappingmodel) + echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" + xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" + ;; *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" @@ -42,15 +58,17 @@ install_resource() esac } +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then - case "${TARGETED_DEVICE_FAMILY}" in + case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -62,7 +80,16 @@ then ;; *) TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + ;; + esac + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi diff --git a/Project/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/Project/Pods/Target Support Files/Pods/Pods.debug.xcconfig new file mode 100644 index 0000000..a94e0c5 --- /dev/null +++ b/Project/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CSStickyHeaderFlowLayout" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/CSStickyHeaderFlowLayout" +OTHER_LDFLAGS = $(inherited) -ObjC -l"CSStickyHeaderFlowLayout" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Project/Pods/Target Support Files/Pods/Pods.release.xcconfig b/Project/Pods/Target Support Files/Pods/Pods.release.xcconfig new file mode 100644 index 0000000..a94e0c5 --- /dev/null +++ b/Project/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CSStickyHeaderFlowLayout" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/CSStickyHeaderFlowLayout" +OTHER_LDFLAGS = $(inherited) -ObjC -l"CSStickyHeaderFlowLayout" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Project/SwiftDemo/SwiftDemo.xcodeproj/project.pbxproj b/Project/SwiftDemo/SwiftDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a30ce3f --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo.xcodeproj/project.pbxproj @@ -0,0 +1,470 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1A3BEB111B56C602009644C9 /* CSStickyHeaderFlowLayout.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A3BEB101B56C602009644C9 /* CSStickyHeaderFlowLayout.framework */; }; + 1A3BEB171B56C8E2009644C9 /* CollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A3BEB161B56C8E2009644C9 /* CollectionViewCell.swift */; }; + 1A3BEB191B56CBE9009644C9 /* CollectionParallaxHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A3BEB181B56CBE9009644C9 /* CollectionParallaxHeader.swift */; }; + 1A4229DA1B608D74009C66CD /* CollectionViewSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4229D91B608D74009C66CD /* CollectionViewSectionHeader.swift */; }; + 1A4B2F311B56C513007F67CC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F301B56C513007F67CC /* AppDelegate.swift */; }; + 1A4B2F331B56C513007F67CC /* CollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F321B56C513007F67CC /* CollectionViewController.swift */; }; + 1A4B2F381B56C513007F67CC /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1A4B2F371B56C513007F67CC /* Images.xcassets */; }; + 1A4B2F3B1B56C513007F67CC /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1A4B2F391B56C513007F67CC /* LaunchScreen.xib */; }; + 1A4B2F471B56C513007F67CC /* SwiftDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4B2F461B56C513007F67CC /* SwiftDemoTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1A4B2F411B56C513007F67CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1A4B2F231B56C513007F67CC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1A4B2F2A1B56C513007F67CC; + remoteInfo = SwiftDemo; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1A3BEB101B56C602009644C9 /* CSStickyHeaderFlowLayout.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CSStickyHeaderFlowLayout.framework; path = "../build/Debug-iphoneos/CSStickyHeaderFlowLayout.framework"; sourceTree = ""; }; + 1A3BEB131B56C65F009644C9 /* SwiftDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SwiftDemo-Bridging-Header.h"; sourceTree = ""; }; + 1A3BEB161B56C8E2009644C9 /* CollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewCell.swift; sourceTree = ""; }; + 1A3BEB181B56CBE9009644C9 /* CollectionParallaxHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionParallaxHeader.swift; sourceTree = ""; }; + 1A4229D91B608D74009C66CD /* CollectionViewSectionHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewSectionHeader.swift; sourceTree = ""; }; + 1A4B2F2B1B56C513007F67CC /* SwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A4B2F2F1B56C513007F67CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1A4B2F301B56C513007F67CC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 1A4B2F321B56C513007F67CC /* CollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionViewController.swift; sourceTree = ""; }; + 1A4B2F371B56C513007F67CC /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 1A4B2F3A1B56C513007F67CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 1A4B2F401B56C513007F67CC /* SwiftDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A4B2F451B56C513007F67CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1A4B2F461B56C513007F67CC /* SwiftDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftDemoTests.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1A4B2F281B56C513007F67CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A3BEB111B56C602009644C9 /* CSStickyHeaderFlowLayout.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A4B2F3D1B56C513007F67CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1A4B2F221B56C513007F67CC = { + isa = PBXGroup; + children = ( + 1A3BEB101B56C602009644C9 /* CSStickyHeaderFlowLayout.framework */, + 1A4B2F2D1B56C513007F67CC /* SwiftDemo */, + 1A4B2F431B56C513007F67CC /* SwiftDemoTests */, + 1A4B2F2C1B56C513007F67CC /* Products */, + ); + sourceTree = ""; + }; + 1A4B2F2C1B56C513007F67CC /* Products */ = { + isa = PBXGroup; + children = ( + 1A4B2F2B1B56C513007F67CC /* SwiftDemo.app */, + 1A4B2F401B56C513007F67CC /* SwiftDemoTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 1A4B2F2D1B56C513007F67CC /* SwiftDemo */ = { + isa = PBXGroup; + children = ( + 1A4B2F301B56C513007F67CC /* AppDelegate.swift */, + 1A4B2F321B56C513007F67CC /* CollectionViewController.swift */, + 1A3BEB161B56C8E2009644C9 /* CollectionViewCell.swift */, + 1A3BEB181B56CBE9009644C9 /* CollectionParallaxHeader.swift */, + 1A4229D91B608D74009C66CD /* CollectionViewSectionHeader.swift */, + 1A4B2F371B56C513007F67CC /* Images.xcassets */, + 1A4B2F391B56C513007F67CC /* LaunchScreen.xib */, + 1A4B2F2E1B56C513007F67CC /* Supporting Files */, + 1A3BEB131B56C65F009644C9 /* SwiftDemo-Bridging-Header.h */, + ); + path = SwiftDemo; + sourceTree = ""; + }; + 1A4B2F2E1B56C513007F67CC /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 1A4B2F2F1B56C513007F67CC /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 1A4B2F431B56C513007F67CC /* SwiftDemoTests */ = { + isa = PBXGroup; + children = ( + 1A4B2F461B56C513007F67CC /* SwiftDemoTests.swift */, + 1A4B2F441B56C513007F67CC /* Supporting Files */, + ); + path = SwiftDemoTests; + sourceTree = ""; + }; + 1A4B2F441B56C513007F67CC /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 1A4B2F451B56C513007F67CC /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1A4B2F2A1B56C513007F67CC /* SwiftDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1A4B2F4A1B56C513007F67CC /* Build configuration list for PBXNativeTarget "SwiftDemo" */; + buildPhases = ( + 1A4B2F271B56C513007F67CC /* Sources */, + 1A4B2F281B56C513007F67CC /* Frameworks */, + 1A4B2F291B56C513007F67CC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SwiftDemo; + productName = SwiftDemo; + productReference = 1A4B2F2B1B56C513007F67CC /* SwiftDemo.app */; + productType = "com.apple.product-type.application"; + }; + 1A4B2F3F1B56C513007F67CC /* SwiftDemoTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1A4B2F4D1B56C513007F67CC /* Build configuration list for PBXNativeTarget "SwiftDemoTests" */; + buildPhases = ( + 1A4B2F3C1B56C513007F67CC /* Sources */, + 1A4B2F3D1B56C513007F67CC /* Frameworks */, + 1A4B2F3E1B56C513007F67CC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1A4B2F421B56C513007F67CC /* PBXTargetDependency */, + ); + name = SwiftDemoTests; + productName = SwiftDemoTests; + productReference = 1A4B2F401B56C513007F67CC /* SwiftDemoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 1A4B2F231B56C513007F67CC /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 1110; + ORGANIZATIONNAME = "James Tang"; + TargetAttributes = { + 1A4B2F2A1B56C513007F67CC = { + CreatedOnToolsVersion = 6.3.1; + }; + 1A4B2F3F1B56C513007F67CC = { + CreatedOnToolsVersion = 6.3.1; + TestTargetID = 1A4B2F2A1B56C513007F67CC; + }; + }; + }; + buildConfigurationList = 1A4B2F261B56C513007F67CC /* Build configuration list for PBXProject "SwiftDemo" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 1A4B2F221B56C513007F67CC; + productRefGroup = 1A4B2F2C1B56C513007F67CC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1A4B2F2A1B56C513007F67CC /* SwiftDemo */, + 1A4B2F3F1B56C513007F67CC /* SwiftDemoTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1A4B2F291B56C513007F67CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4B2F3B1B56C513007F67CC /* LaunchScreen.xib in Resources */, + 1A4B2F381B56C513007F67CC /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A4B2F3E1B56C513007F67CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1A4B2F271B56C513007F67CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4229DA1B608D74009C66CD /* CollectionViewSectionHeader.swift in Sources */, + 1A4B2F331B56C513007F67CC /* CollectionViewController.swift in Sources */, + 1A4B2F311B56C513007F67CC /* AppDelegate.swift in Sources */, + 1A3BEB171B56C8E2009644C9 /* CollectionViewCell.swift in Sources */, + 1A3BEB191B56CBE9009644C9 /* CollectionParallaxHeader.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A4B2F3C1B56C513007F67CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A4B2F471B56C513007F67CC /* SwiftDemoTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1A4B2F421B56C513007F67CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1A4B2F2A1B56C513007F67CC /* SwiftDemo */; + targetProxy = 1A4B2F411B56C513007F67CC /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 1A4B2F391B56C513007F67CC /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 1A4B2F3A1B56C513007F67CC /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1A4B2F481B56C513007F67CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 1A4B2F491B56C513007F67CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1A4B2F4B1B56C513007F67CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + INFOPLIST_FILE = SwiftDemo/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "SwiftDemo/SwiftDemo-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 1A4B2F4C1B56C513007F67CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + INFOPLIST_FILE = SwiftDemo/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "SwiftDemo/SwiftDemo-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 1A4B2F4E1B56C513007F67CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = SwiftDemoTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftDemo.app/SwiftDemo"; + }; + name = Debug; + }; + 1A4B2F4F1B56C513007F67CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = SwiftDemoTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.jamztang.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftDemo.app/SwiftDemo"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1A4B2F261B56C513007F67CC /* Build configuration list for PBXProject "SwiftDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1A4B2F481B56C513007F67CC /* Debug */, + 1A4B2F491B56C513007F67CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1A4B2F4A1B56C513007F67CC /* Build configuration list for PBXNativeTarget "SwiftDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1A4B2F4B1B56C513007F67CC /* Debug */, + 1A4B2F4C1B56C513007F67CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1A4B2F4D1B56C513007F67CC /* Build configuration list for PBXNativeTarget "SwiftDemoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1A4B2F4E1B56C513007F67CC /* Debug */, + 1A4B2F4F1B56C513007F67CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 1A4B2F231B56C513007F67CC /* Project object */; +} diff --git a/Project/SwiftDemo/SwiftDemo.xcodeproj/xcshareddata/xcschemes/SwiftDemo.xcscheme b/Project/SwiftDemo/SwiftDemo.xcodeproj/xcshareddata/xcschemes/SwiftDemo.xcscheme new file mode 100644 index 0000000..ceb8f39 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo.xcodeproj/xcshareddata/xcschemes/SwiftDemo.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Project/SwiftDemo/SwiftDemo/AppDelegate.swift b/Project/SwiftDemo/SwiftDemo/AppDelegate.swift new file mode 100644 index 0000000..dd57121 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/AppDelegate.swift @@ -0,0 +1,29 @@ +// +// AppDelegate.swift +// SwiftDemo +// +// Created by James Tang on 16/7/15. +// Copyright (c) 2015 James Tang. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + // Override point for customization after application launch. + + let stickyHeaderFlowLayout = CSStickyHeaderFlowLayout() + let collectionViewController = CollectionViewController(collectionViewLayout: stickyHeaderFlowLayout) + + let window = UIWindow(frame: UIScreen.main.bounds) + window.rootViewController = collectionViewController + window.makeKeyAndVisible() + self.window = window + return true + } +} + diff --git a/Project/SwiftDemo/SwiftDemo/Base.lproj/LaunchScreen.xib b/Project/SwiftDemo/SwiftDemo/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..9f93f96 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/Base.lproj/LaunchScreen.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Project/SwiftDemo/SwiftDemo/CollectionParallaxHeader.swift b/Project/SwiftDemo/SwiftDemo/CollectionParallaxHeader.swift new file mode 100644 index 0000000..9b9e7a9 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/CollectionParallaxHeader.swift @@ -0,0 +1,40 @@ +// +// CollectionParallaxHeader.swift +// SwiftDemo +// +// Created by James Tang on 16/7/15. +// Copyright © 2015 James Tang. All rights reserved. +// + +import UIKit + +class CollectionParallaxHeader: UICollectionReusableView { + + + private var imageView : UIImageView? + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = UIColor.lightGray + + self.clipsToBounds = true + + let bounds = CGRect(x: 0, y: 0, width: frame.maxX, height: frame.maxY) + + let imageView = UIImageView(frame: bounds) + imageView.contentMode = UIView.ContentMode.scaleAspectFill + imageView.image = UIImage(named: "success-baby") + self.imageView = imageView + self.addSubview(imageView) + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + override func layoutSubviews() { + super.layoutSubviews() + self.imageView?.frame = self.bounds + } + +} diff --git a/Project/SwiftDemo/SwiftDemo/CollectionViewCell.swift b/Project/SwiftDemo/SwiftDemo/CollectionViewCell.swift new file mode 100644 index 0000000..dc76a04 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/CollectionViewCell.swift @@ -0,0 +1,45 @@ +// +// CollectionViewCell.swift +// SwiftDemo +// +// Created by James Tang on 16/7/15. +// Copyright © 2015 James Tang. All rights reserved. +// + +import UIKit + +class CollectionViewCell: UICollectionViewCell { + + var text : String? { + didSet { + self.reloadData() + } + } + + private var textLabel : UILabel? + + override init(frame: CGRect) { + super.init(frame: frame) + + self.backgroundColor = UIColor.white + + let bounds = CGRect(x: 0, y: 0, width: frame.maxX, height: frame.maxY) + let label = UILabel(frame: bounds) + label.autoresizingMask = [UIView.AutoresizingMask.flexibleHeight, UIView.AutoresizingMask.flexibleWidth] + self.textLabel = label + self.addSubview(label) + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + func reloadData() { + self.textLabel?.text = self.text + } + + override func layoutSubviews() { + super.layoutSubviews() + self.textLabel?.frame = self.bounds + } +} diff --git a/Project/SwiftDemo/SwiftDemo/CollectionViewController.swift b/Project/SwiftDemo/SwiftDemo/CollectionViewController.swift new file mode 100644 index 0000000..0a063ae --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/CollectionViewController.swift @@ -0,0 +1,70 @@ +// +// ViewController.swift +// SwiftDemo +// +// Created by James Tang on 16/7/15. +// Copyright (c) 2015 James Tang. All rights reserved. +// + +import UIKit + +class CollectionViewController: UICollectionViewController { + + var items : [String] = ["CSStickyHeaderFlowLayout basic example", "Example to initialize in code", "As well as in Swift", "Please Enjoy"] + + private var layout : CSStickyHeaderFlowLayout? { + return self.collectionView?.collectionViewLayout as? CSStickyHeaderFlowLayout + } + + override func viewDidLoad() { + super.viewDidLoad() + + self.collectionView?.alwaysBounceVertical = true + self.collectionView.backgroundColor = .groupTableViewBackground + self.view.backgroundColor = UIColor.white + + // Setup Cell + self.collectionView?.register(CollectionViewCell.self, forCellWithReuseIdentifier: "cell") + self.layout?.itemSize = CGSize(width: self.view.frame.size.width, height: 44) + + // Setup Header + self.collectionView?.register(CollectionParallaxHeader.self, forSupplementaryViewOfKind: CSStickyHeaderParallaxHeader, withReuseIdentifier: "parallaxHeader") + self.layout?.parallaxHeaderReferenceSize = CGSize(width: self.view.frame.size.width, height: 100) + + // Setup Section Header + self.collectionView?.register(CollectionViewSectionHeader.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "sectionHeader") + self.layout?.headerReferenceSize = CGSize(width: 320, height: 40) + } + + // Cells + + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return self.items.count + } + + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell + cell.text = self.items[indexPath.row] + return cell + } + + // Parallax Header + + override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { + + if kind == CSStickyHeaderParallaxHeader { + let view = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "parallaxHeader", for: indexPath) + return view + } else if kind == UICollectionView.elementKindSectionHeader { + let view = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "sectionHeader", for: indexPath) + view.backgroundColor = UIColor.lightGray + return view + } + + return UICollectionReusableView() + + } + +} + diff --git a/Project/SwiftDemo/SwiftDemo/CollectionViewSectionHeader.swift b/Project/SwiftDemo/SwiftDemo/CollectionViewSectionHeader.swift new file mode 100644 index 0000000..d91febf --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/CollectionViewSectionHeader.swift @@ -0,0 +1,29 @@ +// +// CollectionViewSectionHeader.swift +// SwiftDemo +// +// Created by James Tang on 23/7/15. +// Copyright © 2015 James Tang. All rights reserved. +// + +import UIKit + +class CollectionViewSectionHeader: UICollectionReusableView { + + let label = UILabel() + override init(frame: CGRect) { + super.init(frame: frame) + commonInit() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + commonInit() + } + + func commonInit() { + self.addSubview(label) + label.frame = self.bounds + label.text = UICollectionView.elementKindSectionHeader + } +} diff --git a/Project/SwiftDemo/SwiftDemo/Images.xcassets/AppIcon.appiconset/Contents.json b/Project/SwiftDemo/SwiftDemo/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Project/SwiftDemo/SwiftDemo/Images.xcassets/Contents.json b/Project/SwiftDemo/SwiftDemo/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Project/SwiftDemo/SwiftDemo/Images.xcassets/success-baby.imageset/Contents.json b/Project/SwiftDemo/SwiftDemo/Images.xcassets/success-baby.imageset/Contents.json new file mode 100644 index 0000000..c79515f --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/Images.xcassets/success-baby.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "success-baby.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Project/SwiftDemo/SwiftDemo/Images.xcassets/success-baby.imageset/success-baby.png b/Project/SwiftDemo/SwiftDemo/Images.xcassets/success-baby.imageset/success-baby.png new file mode 100644 index 0000000..753bf27 Binary files /dev/null and b/Project/SwiftDemo/SwiftDemo/Images.xcassets/success-baby.imageset/success-baby.png differ diff --git a/Project/SwiftDemo/SwiftDemo/Info.plist b/Project/SwiftDemo/SwiftDemo/Info.plist new file mode 100644 index 0000000..d39a4da --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Project/SwiftDemo/SwiftDemo/SwiftDemo-Bridging-Header.h b/Project/SwiftDemo/SwiftDemo/SwiftDemo-Bridging-Header.h new file mode 100644 index 0000000..311503e --- /dev/null +++ b/Project/SwiftDemo/SwiftDemo/SwiftDemo-Bridging-Header.h @@ -0,0 +1,6 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + + +#import \ No newline at end of file diff --git a/Project/SwiftDemo/SwiftDemoTests/Info.plist b/Project/SwiftDemo/SwiftDemoTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Project/SwiftDemo/SwiftDemoTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Project/SwiftDemo/SwiftDemoTests/SwiftDemoTests.swift b/Project/SwiftDemo/SwiftDemoTests/SwiftDemoTests.swift new file mode 100644 index 0000000..dea3ced --- /dev/null +++ b/Project/SwiftDemo/SwiftDemoTests/SwiftDemoTests.swift @@ -0,0 +1,36 @@ +// +// SwiftDemoTests.swift +// SwiftDemoTests +// +// Created by James Tang on 16/7/15. +// Copyright (c) 2015 James Tang. All rights reserved. +// + +import UIKit +import XCTest + +class SwiftDemoTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measureBlock() { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/README.md b/README.md index 4e79416..79dc42e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # CSStickyHeaderFlowLayout +## Contributors + +For anyone who'd like to be a contributor to the repository, please read the [Contribution Guideline](https://github.com/CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout/wiki/Contribution-Guidelines) + +--- + @@ -14,16 +20,25 @@ UICollectionViewLayout. [![Version](http://cocoapod-badges.herokuapp.com/v/CSStickyHeaderFlowLayout/badge.png)](http://cocoadocs.org/docsets/CSStickyHeaderFlowLayout) [![Platform](http://cocoapod-badges.herokuapp.com/p/CSStickyHeaderFlowLayout/badge.png)](http://cocoadocs.org/docsets/CSStickyHeaderFlowLayout) +### Cocoapods CSStickyHeaderFlowLayout is available through [CocoaPods](http://cocoapods.org), to install it simply add the following line to your Podfile: pod "CSStickyHeaderFlowLayout" +### Carthage + +CSStickyHeaderFlowLayout is also available with Carthage. +Add `github "CSStickyHeaderFlowLayout/CSStickyHeaderFlowLayout"` to your Cartfile + Alternatively, you can just drag the files from `CSStickyHeaderFlowLayout / Classes` into your own project. +## Usage (Swift/Code) + +Documentation is coming soon. For now please open `CSStickyHeaderFlowLayout.xcworkspace` > `SwiftDemo` target. -## Usage +## Usage (CocoaPods/Objective-C/Storyboard) To run the example project; clone the repo, and run `pod install` from the Project directory first. @@ -106,20 +121,20 @@ Run the project examples and it'll shows you exactly how you achieve different e ![](http://f.cl.ly/items/313D2n3R0H0e0x090B3X/different-header.jpeg) +## Updates +- 0.2.12: Add Swift 5 Demo +- 0.2.11: Add support for carthage. -## Donation +- 0.2.10: Fixed issue because attributes were not copied and datasource might have been niled -If you think this worths something, tip me a cup of coffee! (p.s. was trying out ChangeTip, or if you know any better donation button, let [me](http://twitter.com/@jamztang) know) :) +- 0.2.9: Remove Supplementry Header Layout Attribute to prevent crash when returning nil and while is CGSizeZero - - Tip Me With ChangeTip - +- 0.2.8: Fixed a visual issue when animating contentInsets #85 and crash when dragging cells #69 +- 0.2.7: Fixed scroll indicator covered by cell -## Updates +- 0.2.6: Fixing that section header being covered by cell after perform batch update - 0.2.5: Fixing a crash when quickly popping back to a view controller using the parallax header