diff --git a/TLYShyNavBar.podspec b/TLYShyNavBar.podspec index 908bfb2..34935fd 100644 --- a/TLYShyNavBar.podspec +++ b/TLYShyNavBar.podspec @@ -95,7 +95,7 @@ Pod::Spec.new do |s| s.source_files = "TLYShyNavBar/**/*" s.exclude_files = "" - s.public_header_files = "TLYShyNavBar/TLYShyNavBarManager.h" + s.public_header_files = "TLYShyNavBar/*.h" # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # diff --git a/TLYShyNavBar/TLYDelegateProxy.h b/TLYShyNavBar/Categories/TLYDelegateProxy.h similarity index 100% rename from TLYShyNavBar/TLYDelegateProxy.h rename to TLYShyNavBar/Categories/TLYDelegateProxy.h diff --git a/TLYShyNavBar/TLYDelegateProxy.m b/TLYShyNavBar/Categories/TLYDelegateProxy.m similarity index 100% rename from TLYShyNavBar/TLYDelegateProxy.m rename to TLYShyNavBar/Categories/TLYDelegateProxy.m diff --git a/TLYShyNavBar/Categories/UIScrollView+Helpers.h b/TLYShyNavBar/Categories/UIScrollView+Helpers.h new file mode 100644 index 0000000..b2f9a22 --- /dev/null +++ b/TLYShyNavBar/Categories/UIScrollView+Helpers.h @@ -0,0 +1,16 @@ +// +// UIScrollView+Helpers.h +// TLYShyNavBarDemo +// +// Created by Mazyad Alabduljaleel on 11/13/15. +// Copyright © 2015 Telly, Inc. All rights reserved. +// + +#import + + +@interface UIScrollView (Helpers) + +- (void)tly_smartSetInsets:(UIEdgeInsets)contentAndScrollIndicatorInsets; + +@end diff --git a/TLYShyNavBar/Categories/UIScrollView+Helpers.m b/TLYShyNavBar/Categories/UIScrollView+Helpers.m new file mode 100644 index 0000000..30824e6 --- /dev/null +++ b/TLYShyNavBar/Categories/UIScrollView+Helpers.m @@ -0,0 +1,26 @@ +// +// UIScrollView+Helpers.m +// TLYShyNavBarDemo +// +// Created by Mazyad Alabduljaleel on 11/13/15. +// Copyright © 2015 Telly, Inc. All rights reserved. +// + +#import "UIScrollView+Helpers.h" + +@implementation UIScrollView (Helpers) + +// Modify contentInset and scrollIndicatorInsets while preserving visual content offset +- (void)tly_smartSetInsets:(UIEdgeInsets)contentAndScrollIndicatorInsets +{ + if (contentAndScrollIndicatorInsets.top != self.contentInset.top) + { + CGPoint contentOffset = self.contentOffset; + contentOffset.y -= contentAndScrollIndicatorInsets.top - self.contentInset.top; + self.contentOffset = contentOffset; + } + + self.contentInset = self.scrollIndicatorInsets = contentAndScrollIndicatorInsets; +} + +@end diff --git a/TLYShyNavBar/ShyControllers/TLYShyParent.h b/TLYShyNavBar/ShyControllers/TLYShyParent.h new file mode 100644 index 0000000..19ae43b --- /dev/null +++ b/TLYShyNavBar/ShyControllers/TLYShyParent.h @@ -0,0 +1,20 @@ +// +// TLYShyParent.h +// TLYShyNavBarDemo +// +// Created by Mazyad Alabduljaleel on 11/13/15. +// Copyright © 2015 Telly, Inc. All rights reserved. +// + +#ifndef TLYShyParent_h +#define TLYShyParent_h + +@protocol TLYShyParent + +@property (nonatomic, readonly) CGFloat viewMaxY; + +- (CGFloat)calculateTotalHeightRecursively; + +@end + +#endif /* TLYShyParent_h */ diff --git a/TLYShyNavBar/ShyControllers/TLYShyStatusBarController.h b/TLYShyNavBar/ShyControllers/TLYShyStatusBarController.h new file mode 100644 index 0000000..ac46abb --- /dev/null +++ b/TLYShyNavBar/ShyControllers/TLYShyStatusBarController.h @@ -0,0 +1,17 @@ +// +// TLYShyStatusBarController.h +// TLYShyNavBarDemo +// +// Created by Mazyad Alabduljaleel on 11/13/15. +// Copyright © 2015 Telly, Inc. All rights reserved. +// + +#import +#import "TLYShyParent.h" + + +@interface TLYShyStatusBarController : NSObject + +@property (nonatomic, weak) UIViewController *viewController; + +@end diff --git a/TLYShyNavBar/ShyControllers/TLYShyStatusBarController.m b/TLYShyNavBar/ShyControllers/TLYShyStatusBarController.m new file mode 100644 index 0000000..86e1377 --- /dev/null +++ b/TLYShyNavBar/ShyControllers/TLYShyStatusBarController.m @@ -0,0 +1,68 @@ +// +// TLYShyStatusBarController.m +// TLYShyNavBarDemo +// +// Created by Mazyad Alabduljaleel on 11/13/15. +// Copyright © 2015 Telly, Inc. All rights reserved. +// + +#import "TLYShyStatusBarController.h" + + +// Thanks to SO user, MattDiPasquale +// http://stackoverflow.com/questions/12991935/how-to-programmatically-get-ios-status-bar-height/16598350#16598350 + +static inline CGFloat AACStatusBarHeight(UIViewController *viewController) +{ + if ([UIApplication sharedApplication].statusBarHidden) + { + return 0.f; + } + + // Modal views do not overlap the status bar, so no allowance need be made for it + CGSize statusBarSize = [UIApplication sharedApplication].statusBarFrame.size; + CGFloat statusBarHeight = MIN(statusBarSize.width, statusBarSize.height); + + UIView *view = viewController.view; + CGRect frame = [view.superview convertRect:view.frame toView:view.window]; + + BOOL viewOverlapsStatusBar = frame.origin.y < statusBarHeight; + + if (!viewOverlapsStatusBar) + { + return 0.f; + } + + return statusBarHeight; +} + + +@implementation TLYShyStatusBarController + +- (CGFloat)_statusBarHeight +{ + CGFloat statusBarHeight = AACStatusBarHeight(self.viewController); + /* The standard status bar is 20 pixels. The navigation bar extends 20 pixels up so it is overlapped by the status bar. + * When there is a larger than 20 pixel status bar (e.g. a phone call is in progress or GPS is active), the center needs + * to shift up 20 pixels to avoid this 'dead space' being visible above the usual nav bar. + */ + if (statusBarHeight > 20) + { + statusBarHeight -= 20; + } + + return statusBarHeight; +} + +- (CGFloat)viewMaxY +{ + return [self _statusBarHeight]; +} + +- (CGFloat)calculateTotalHeightRecursively +{ + return [self _statusBarHeight]; +} + +@end + diff --git a/TLYShyNavBar/TLYShyViewController.h b/TLYShyNavBar/ShyControllers/TLYShyViewController.h similarity index 65% rename from TLYShyNavBar/TLYShyViewController.h rename to TLYShyNavBar/ShyControllers/TLYShyViewController.h index 83554df..29406bc 100644 --- a/TLYShyNavBar/TLYShyViewController.h +++ b/TLYShyNavBar/ShyControllers/TLYShyViewController.h @@ -8,6 +8,9 @@ #import #import +#import "TLYShyParent.h" +#import "../TLYShyNavBarFade.h" + extern const CGFloat contractionVelocity; @@ -15,24 +18,6 @@ typedef CGPoint(^TLYShyViewControllerExpandedCenterBlock)(UIView *view); typedef CGFloat(^TLYShyViewControllerContractionAmountBlock)(UIView *view); -/** This enum is duplicated in the manager header, as to not cause headaches - * for users looking to update the library in Cocoapods. - */ -typedef NS_ENUM(NSInteger, TLYShyNavViewControllerFade) { - - TLYShyNavViewControllerFadeDisabled, - TLYShyNavViewControllerFadeSubviews, - TLYShyNavViewControllerFadeNavbar, -}; - -@protocol TLYShyViewControllerParent - -@property (nonatomic, readonly) CGFloat viewMaxY; - -- (CGFloat)calculateTotalHeightRecursively; - -@end - /* CLASS DESCRIPTION: * ================== * A shy view is a view that contracts when a scrolling event is @@ -47,10 +32,10 @@ typedef NS_ENUM(NSInteger, TLYShyNavViewControllerFade) { @interface TLYShyViewController : NSObject @property (nonatomic, weak) TLYShyViewController *child; -@property (nonatomic, weak) id parent; +@property (nonatomic, weak) id parent; @property (nonatomic, weak) UIView *view; -@property (nonatomic) TLYShyNavViewControllerFade fadeBehavior; +@property (nonatomic) TLYShyNavBarFade fadeBehavior; @property (nonatomic, readonly) CGFloat totalHeight; @@ -69,5 +54,5 @@ typedef NS_ENUM(NSInteger, TLYShyNavViewControllerFade) { @end -@interface TLYShyViewController (AsParent) +@interface TLYShyViewController (AsParent) @end diff --git a/TLYShyNavBar/TLYShyViewController.m b/TLYShyNavBar/ShyControllers/TLYShyViewController.m similarity index 81% rename from TLYShyNavBar/TLYShyViewController.m rename to TLYShyNavBar/ShyControllers/TLYShyViewController.m index a271d17..f7ceefd 100644 --- a/TLYShyNavBar/TLYShyViewController.m +++ b/TLYShyNavBar/ShyControllers/TLYShyViewController.m @@ -26,13 +26,13 @@ - (CGFloat)calculateTotalHeightRecursively @interface TLYShyViewController () -@property (nonatomic) CGPoint expandedCenterValue; -@property (nonatomic) CGFloat contractionAmountValue; +@property (nonatomic, assign) CGPoint expandedCenterValue; +@property (nonatomic, assign) CGFloat contractionAmountValue; -@property (nonatomic) CGPoint contractedCenterValue; +@property (nonatomic, assign) CGPoint contractedCenterValue; -@property (nonatomic, getter = isContracted) BOOL contracted; -@property (nonatomic, getter = isExpanded) BOOL expanded; +@property (nonatomic, assign) BOOL contracted; +@property (nonatomic, assign) BOOL expanded; @end @@ -61,12 +61,12 @@ - (CGPoint)contractedCenterValue return CGPointMake(self.expandedCenterValue.x, self.expandedCenterValue.y - self.contractionAmountValue); } -- (BOOL)isContracted +- (BOOL)contracted { return fabs(self.view.center.y - self.contractedCenterValue.y) < FLT_EPSILON; } -- (BOOL)isExpanded +- (BOOL)expanded { return fabs(self.view.center.y - self.expandedCenterValue.y) < FLT_EPSILON; } @@ -89,17 +89,17 @@ - (void)_onAlphaUpdate:(CGFloat)alpha switch (self.fadeBehavior) { - case TLYShyNavViewControllerFadeDisabled: + case TLYShyNavBarFadeDisabled: self.view.alpha = 1.f; [self _updateSubviewsAlpha:1.f]; break; - case TLYShyNavViewControllerFadeSubviews: + case TLYShyNavBarFadeSubviews: self.view.alpha = 1.f; [self _updateSubviewsAlpha:alpha]; break; - case TLYShyNavViewControllerFadeNavbar: + case TLYShyNavBarFadeNavbar: self.view.alpha = alpha; [self _updateSubviewsAlpha:1.f]; break; @@ -133,11 +133,11 @@ - (void)_updateCenter:(CGPoint)newCenter #pragma mark - Public methods -- (void)setFadeBehavior:(TLYShyNavViewControllerFade)fadeBehavior +- (void)setFadeBehavior:(TLYShyNavBarFade)fadeBehavior { _fadeBehavior = fadeBehavior; - if (fadeBehavior == TLYShyNavViewControllerFadeDisabled) + if (fadeBehavior == TLYShyNavBarFadeDisabled) { [self _onAlphaUpdate:1.f]; } @@ -153,10 +153,10 @@ - (void)offsetCenterBy:(CGPoint)deltaPoint - (CGFloat)updateYOffset:(CGFloat)deltaY { - if (self.child && deltaY < 0) + if (self.child && !self.child.sticky && deltaY < 0) { deltaY = [self.child updateYOffset:deltaY]; - self.child.view.hidden = (!self.child.sticky && deltaY < 0); + self.child.view.hidden = deltaY < 0; } CGFloat newYOffset = self.view.center.y + deltaY; @@ -171,14 +171,11 @@ - (CGFloat)updateYOffset:(CGFloat)deltaY CGFloat residual = newYOffset - newYCenter; - if (self.child && deltaY > 0 && residual > 0) + if (self.child && !self.child.sticky && deltaY > 0 && residual > 0) { - residual = [self.child updateYOffset:residual]; - self.child.view.hidden = (!self.child.sticky && residual - (newYOffset - newYCenter) > FLT_EPSILON); - } - else if (self.child.sticky && deltaY > 0) - { - [self.child updateYOffset:deltaY]; + CGFloat newResidual = [self.child updateYOffset:residual]; + self.child.view.hidden = newResidual - residual > FLT_EPSILON; + residual = newResidual; } return residual; @@ -200,7 +197,7 @@ - (CGFloat)snap:(BOOL)contract __block CGFloat deltaY; [UIView animateWithDuration:0.2 animations:^ { - if ((contract && self.child.isContracted) || (!contract && !self.isExpanded)) + if ((contract && self.child.contracted) || (!contract && !self.expanded)) { deltaY = [self contract]; } diff --git a/TLYShyNavBar/TLYShyNavBarFade.h b/TLYShyNavBar/TLYShyNavBarFade.h new file mode 100644 index 0000000..6489fb2 --- /dev/null +++ b/TLYShyNavBar/TLYShyNavBarFade.h @@ -0,0 +1,21 @@ +// +// TLYShyNavBarFade.h +// TLYShyNavBarDemo +// +// Created by Mazyad Alabduljaleel on 11/13/15. +// Copyright © 2015 Telly, Inc. All rights reserved. +// + +#ifndef TLYShyNavBarFade_h +#define TLYShyNavBarFade_h + +/** This enum helps control the navigation bar fade behavior. + */ +typedef NS_ENUM(NSInteger, TLYShyNavBarFade) { + + TLYShyNavBarFadeDisabled, + TLYShyNavBarFadeSubviews, + TLYShyNavBarFadeNavbar, +}; + +#endif /* TLYShyNavBarFade_h */ diff --git a/TLYShyNavBar/TLYShyNavBarManager.h b/TLYShyNavBar/TLYShyNavBarManager.h index 7c8d495..120f8ee 100644 --- a/TLYShyNavBar/TLYShyNavBarManager.h +++ b/TLYShyNavBar/TLYShyNavBarManager.h @@ -8,18 +8,9 @@ #import #import +#import "TLYShyNavBarFade.h" -/** This enum helps control the navigation bar fade behavior. - * NOTE: It is duplicated in the ShyNavController header for now. - */ -typedef NS_ENUM(NSInteger, TLYShyNavBarFade) { - - TLYShyNavBarFadeDisabled, - TLYShyNavBarFadeSubviews, - TLYShyNavBarFadeNavbar, -}; - /** CLASS DESCRIPTION: * ================== * Manages the relationship between a scrollView and a view @@ -100,18 +91,3 @@ typedef NS_ENUM(NSInteger, TLYShyNavBarFade) { @end - -/* DEPRECATED: - * =========== - * Please move away from using these properties, as they will be - * removed in the next major release. - */ -@interface TLYShyNavBarManager (Deprecated) - -@property (nonatomic, getter = isAlphaFadeEnabled) BOOL alphaFadeEnabled -DEPRECATED_MSG_ATTRIBUTE("use fadeBehavior = TLYShyNavBarFade(Subviews or None)"); - -@property (nonatomic, getter = isAlphaFadeEntireNavBarEnabled) BOOL alphaFadeEntireNavBar -DEPRECATED_MSG_ATTRIBUTE("use fadeBehavior = TLYShyNavBarFadeNavbar"); - -@end \ No newline at end of file diff --git a/TLYShyNavBar/TLYShyNavBarManager.m b/TLYShyNavBar/TLYShyNavBarManager.m index d94912f..e795590 100644 --- a/TLYShyNavBar/TLYShyNavBarManager.m +++ b/TLYShyNavBar/TLYShyNavBarManager.m @@ -7,104 +7,26 @@ // #import "TLYShyNavBarManager.h" -#import "TLYShyViewController.h" -#import "TLYDelegateProxy.h" +#import "ShyControllers/TLYShyViewController.h" +#import "ShyControllers/TLYShyStatusBarController.h" + +#import "Categories/TLYDelegateProxy.h" #import "Categories/UIViewController+BetterLayoutGuides.h" #import "Categories/NSObject+TLYSwizzlingHelpers.h" +#import "Categories/UIScrollView+Helpers.h" #import -#pragma mark - Helper functions - -// Thanks to SO user, MattDiPasquale -// http://stackoverflow.com/questions/12991935/how-to-programmatically-get-ios-status-bar-height/16598350#16598350 - -static inline CGFloat AACStatusBarHeight(UIViewController *viewController) -{ - if ([UIApplication sharedApplication].statusBarHidden) - { - return 0.f; - } - - // Modal views do not overlap the status bar, so no allowance need be made for it - CGSize statusBarSize = [UIApplication sharedApplication].statusBarFrame.size; - CGFloat statusBarHeight = MIN(statusBarSize.width, statusBarSize.height); - - UIView *view = viewController.view; - CGRect frame = [view.superview convertRect:view.frame toView:view.window]; - - BOOL viewOverlapsStatusBar = frame.origin.y < statusBarHeight; - - if (!viewOverlapsStatusBar) - { - return 0.f; - } - - return statusBarHeight; -} static void * const kTLYShyNavBarManagerKVOContext = (void*)&kTLYShyNavBarManagerKVOContext; -@implementation UIScrollView(Helper) - -// Modify contentInset and scrollIndicatorInsets while preserving visual content offset -- (void)tly_smartSetInsets:(UIEdgeInsets)contentAndScrollIndicatorInsets -{ - if (contentAndScrollIndicatorInsets.top != self.contentInset.top) - { - CGPoint contentOffset = self.contentOffset; - contentOffset.y -= contentAndScrollIndicatorInsets.top - self.contentInset.top; - self.contentOffset = contentOffset; - } - - self.contentInset = self.scrollIndicatorInsets = contentAndScrollIndicatorInsets; -} - -@end - - -@interface TLYShyStatusBarController : NSObject - -@property (nonatomic, weak) UIViewController *viewController; - -@end - -@implementation TLYShyStatusBarController - -- (CGFloat)_statusBarHeight -{ - CGFloat statusBarHeight = AACStatusBarHeight(self.viewController); - /* The standard status bar is 20 pixels. The navigation bar extends 20 pixels up so it is overlapped by the status bar. - * When there is a larger than 20 pixel status bar (e.g. a phone call is in progress or GPS is active), the center needs - * to shift up 20 pixels to avoid this 'dead space' being visible above the usual nav bar. - */ - if (statusBarHeight > 20) - { - statusBarHeight -= 20; - } - - return statusBarHeight; -} - -- (CGFloat)viewMaxY -{ - return [self _statusBarHeight]; -} - -- (CGFloat)calculateTotalHeightRecursively -{ - return [self _statusBarHeight]; -} - -@end - #pragma mark - TLYShyNavBarManager class @interface TLYShyNavBarManager () -@property (nonatomic, strong) id statusBarController; +@property (nonatomic, strong) id statusBarController; @property (nonatomic, strong) TLYShyViewController *navBarController; @property (nonatomic, strong) TLYShyViewController *extensionController; @@ -116,7 +38,7 @@ @interface TLYShyNavBarManager () @property (nonatomic) CGFloat previousYOffset; @property (nonatomic) CGFloat resistanceConsumed; -@property (nonatomic, getter = isContracting) BOOL contracting; +@property (nonatomic, assign) BOOL contracting; @property (nonatomic) BOOL previousContractionState; @property (nonatomic, readonly) BOOL isViewControllerVisible; @@ -284,6 +206,7 @@ - (BOOL)_shouldHandleScrolling { return NO; } + return (self.isViewControllerVisible && [self _scrollViewIsSuffecientlyLong]); } @@ -320,21 +243,23 @@ - (void)_handleScrolling } // 4 - Check if contracting state changed, and do stuff if so - if (self.isContracting != self.previousContractionState) + if (self.contracting != self.previousContractionState) { - self.previousContractionState = self.isContracting; + self.previousContractionState = self.contracting; self.resistanceConsumed = 0; } // 5 - Apply resistance - if (self.isContracting) + // 5.1 - Always apply resistance when contracting + if (self.contracting) { CGFloat availableResistance = self.contractionResistance - self.resistanceConsumed; self.resistanceConsumed = MIN(self.contractionResistance, self.resistanceConsumed - deltaY); deltaY = MIN(0, availableResistance + deltaY); } - else if (self.scrollView.contentOffset.y > -AACStatusBarHeight(self.viewController)) + // 5.2 - Only apply resistance if expanding above the status bar + else if (self.scrollView.contentOffset.y > -[self.statusBarController calculateTotalHeightRecursively]) { CGFloat availableResistance = self.expansionResistance - self.resistanceConsumed; self.resistanceConsumed = MIN(self.expansionResistance, self.resistanceConsumed + deltaY); @@ -343,7 +268,7 @@ - (void)_handleScrolling } // 6 - Update the navigation bar shyViewController - self.navBarController.fadeBehavior = (TLYShyNavViewControllerFade)self.fadeBehavior; + self.navBarController.fadeBehavior = (TLYShyNavBarFade)self.fadeBehavior; [self.navBarController updateYOffset:deltaY]; @@ -361,7 +286,7 @@ - (void)_handleScrollingEnded self.resistanceConsumed = 0; - CGFloat deltaY = [self.navBarController snap:self.isContracting]; + CGFloat deltaY = [self.navBarController snap:self.contracting]; CGPoint newContentOffset = self.scrollView.contentOffset; newContentOffset.y -= deltaY; @@ -558,30 +483,3 @@ - (TLYShyNavBarManager *)_internalShyNavBarManager @end - -#pragma mark - Deprecated - - -@implementation TLYShyNavBarManager (Deprecated) - -- (BOOL)isAlphaFadeEnabled -{ - return self.fadeBehavior != TLYShyNavBarFadeDisabled; -} - -- (void)setAlphaFadeEnabled:(BOOL)alphaFadeEnabled -{ - self.fadeBehavior = alphaFadeEnabled ? TLYShyNavBarFadeSubviews : TLYShyNavBarFadeDisabled; -} - -- (BOOL)isAlphaFadeEntireNavBarEnabled -{ - return self.fadeBehavior != TLYShyNavBarFadeNavbar; -} - -- (void)setAlphaFadeEntireNavBar:(BOOL)alphaFadeEntireNavBar -{ - self.fadeBehavior = alphaFadeEntireNavBar ? TLYShyNavBarFadeNavbar : TLYShyNavBarFadeDisabled; -} - -@end - diff --git a/TLYShyNavBarDemo/TLYShyNavBarDemo.xcodeproj/project.pbxproj b/TLYShyNavBarDemo/TLYShyNavBarDemo.xcodeproj/project.pbxproj index a816fff..78f168a 100644 --- a/TLYShyNavBarDemo/TLYShyNavBarDemo.xcodeproj/project.pbxproj +++ b/TLYShyNavBarDemo/TLYShyNavBarDemo.xcodeproj/project.pbxproj @@ -9,8 +9,11 @@ /* Begin PBXBuildFile section */ 821A4D771BF6CCEC00E675DB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 821A4D761BF6CCEC00E675DB /* LaunchScreen.storyboard */; }; 821A4D7B1BF6D01600E675DB /* TLYTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 821A4D7A1BF6D01600E675DB /* TLYTableViewController.m */; }; + 821A4D7F1BF6D70100E675DB /* TLYShyStatusBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 821A4D7E1BF6D70100E675DB /* TLYShyStatusBarController.m */; }; + 821A4D841BF6D89E00E675DB /* TLYShyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 821A4D831BF6D89E00E675DB /* TLYShyViewController.m */; }; + 821A4D881BF6DA2700E675DB /* UIScrollView+Helpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 821A4D871BF6DA2700E675DB /* UIScrollView+Helpers.m */; }; + 821A4D8B1BF6E5D400E675DB /* TLYDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 821A4D8A1BF6E5D400E675DB /* TLYDelegateProxy.m */; }; 8262C8551BD730DD00B610A0 /* TLYCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8262C8541BD730DD00B610A0 /* TLYCollectionViewController.m */; }; - 8268FA02194C926F004EC0E4 /* TLYShyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8268FA01194C926F004EC0E4 /* TLYShyViewController.m */; }; 8268FA13194DBA58004EC0E4 /* TLYShyNavBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8268FA12194DBA58004EC0E4 /* TLYShyNavBarManager.m */; }; 828F57201949C37B009EB8DD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 828F571F1949C37B009EB8DD /* Foundation.framework */; }; 828F57221949C37B009EB8DD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 828F57211949C37B009EB8DD /* CoreGraphics.framework */; }; @@ -28,7 +31,6 @@ 828F574B1949C37B009EB8DD /* TLYShyNavBarDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 828F574A1949C37B009EB8DD /* TLYShyNavBarDemoTests.m */; }; 829FEE001957DF620017E186 /* NSObject+TLYSwizzlingHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 829FEDFF1957DF620017E186 /* NSObject+TLYSwizzlingHelpers.m */; }; 82A893861BC6F939004C37E3 /* TLYMenuTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 82A893851BC6F939004C37E3 /* TLYMenuTableViewController.m */; }; - 82B01ED3195D449F00C3C10C /* TLYDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B01ED2195D449F00C3C10C /* TLYDelegateProxy.m */; }; 82C882091955FDA60046C49D /* UIViewController+BetterLayoutGuides.m in Sources */ = {isa = PBXBuildFile; fileRef = 82C882081955FDA60046C49D /* UIViewController+BetterLayoutGuides.m */; }; /* End PBXBuildFile section */ @@ -46,10 +48,18 @@ 821A4D761BF6CCEC00E675DB /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 821A4D791BF6D01600E675DB /* TLYTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYTableViewController.h; sourceTree = ""; }; 821A4D7A1BF6D01600E675DB /* TLYTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYTableViewController.m; sourceTree = ""; }; + 821A4D7D1BF6D70100E675DB /* TLYShyStatusBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYShyStatusBarController.h; sourceTree = ""; }; + 821A4D7E1BF6D70100E675DB /* TLYShyStatusBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYShyStatusBarController.m; sourceTree = ""; }; + 821A4D801BF6D72900E675DB /* TLYShyParent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TLYShyParent.h; sourceTree = ""; }; + 821A4D821BF6D89E00E675DB /* TLYShyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYShyViewController.h; sourceTree = ""; }; + 821A4D831BF6D89E00E675DB /* TLYShyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYShyViewController.m; sourceTree = ""; }; + 821A4D861BF6DA2700E675DB /* UIScrollView+Helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+Helpers.h"; sourceTree = ""; }; + 821A4D871BF6DA2700E675DB /* UIScrollView+Helpers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+Helpers.m"; sourceTree = ""; }; + 821A4D891BF6E5D400E675DB /* TLYDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYDelegateProxy.h; sourceTree = ""; }; + 821A4D8A1BF6E5D400E675DB /* TLYDelegateProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYDelegateProxy.m; sourceTree = ""; }; + 821A4D8C1BF6E5F300E675DB /* TLYShyNavBarFade.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TLYShyNavBarFade.h; sourceTree = ""; }; 8262C8531BD730DD00B610A0 /* TLYCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYCollectionViewController.h; sourceTree = ""; }; 8262C8541BD730DD00B610A0 /* TLYCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYCollectionViewController.m; sourceTree = ""; }; - 8268FA00194C926F004EC0E4 /* TLYShyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYShyViewController.h; sourceTree = ""; }; - 8268FA01194C926F004EC0E4 /* TLYShyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYShyViewController.m; sourceTree = ""; }; 8268FA11194DBA58004EC0E4 /* TLYShyNavBarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYShyNavBarManager.h; sourceTree = ""; }; 8268FA12194DBA58004EC0E4 /* TLYShyNavBarManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYShyNavBarManager.m; sourceTree = ""; }; 828F571C1949C37B009EB8DD /* TLYShyNavBarDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TLYShyNavBarDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -75,8 +85,6 @@ 829FEDFF1957DF620017E186 /* NSObject+TLYSwizzlingHelpers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+TLYSwizzlingHelpers.m"; sourceTree = ""; }; 82A893841BC6F939004C37E3 /* TLYMenuTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYMenuTableViewController.h; sourceTree = ""; }; 82A893851BC6F939004C37E3 /* TLYMenuTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYMenuTableViewController.m; sourceTree = ""; }; - 82B01ED1195D449F00C3C10C /* TLYDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TLYDelegateProxy.h; sourceTree = ""; }; - 82B01ED2195D449F00C3C10C /* TLYDelegateProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TLYDelegateProxy.m; sourceTree = ""; }; 82C882071955FDA60046C49D /* UIViewController+BetterLayoutGuides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+BetterLayoutGuides.h"; sourceTree = ""; }; 82C882081955FDA60046C49D /* UIViewController+BetterLayoutGuides.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+BetterLayoutGuides.m"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -114,6 +122,18 @@ name = TableView; sourceTree = ""; }; + 821A4D7C1BF6D6D200E675DB /* ShyControllers */ = { + isa = PBXGroup; + children = ( + 821A4D801BF6D72900E675DB /* TLYShyParent.h */, + 821A4D7D1BF6D70100E675DB /* TLYShyStatusBarController.h */, + 821A4D7E1BF6D70100E675DB /* TLYShyStatusBarController.m */, + 821A4D821BF6D89E00E675DB /* TLYShyViewController.h */, + 821A4D831BF6D89E00E675DB /* TLYShyViewController.m */, + ); + path = ShyControllers; + sourceTree = ""; + }; 8262C8521BD730CB00B610A0 /* CollectionView */ = { isa = PBXGroup; children = ( @@ -205,13 +225,11 @@ 828F57541949C381009EB8DD /* TLYShyNavBar */ = { isa = PBXGroup; children = ( + 821A4D7C1BF6D6D200E675DB /* ShyControllers */, 82B01EDB195D580000C3C10C /* Categories */, + 821A4D8C1BF6E5F300E675DB /* TLYShyNavBarFade.h */, 8268FA11194DBA58004EC0E4 /* TLYShyNavBarManager.h */, 8268FA12194DBA58004EC0E4 /* TLYShyNavBarManager.m */, - 8268FA00194C926F004EC0E4 /* TLYShyViewController.h */, - 8268FA01194C926F004EC0E4 /* TLYShyViewController.m */, - 82B01ED1195D449F00C3C10C /* TLYDelegateProxy.h */, - 82B01ED2195D449F00C3C10C /* TLYDelegateProxy.m */, ); name = TLYShyNavBar; path = ../TLYShyNavBar; @@ -220,10 +238,14 @@ 82B01EDB195D580000C3C10C /* Categories */ = { isa = PBXGroup; children = ( + 821A4D891BF6E5D400E675DB /* TLYDelegateProxy.h */, + 821A4D8A1BF6E5D400E675DB /* TLYDelegateProxy.m */, 82C882071955FDA60046C49D /* UIViewController+BetterLayoutGuides.h */, 82C882081955FDA60046C49D /* UIViewController+BetterLayoutGuides.m */, 829FEDFE1957DF620017E186 /* NSObject+TLYSwizzlingHelpers.h */, 829FEDFF1957DF620017E186 /* NSObject+TLYSwizzlingHelpers.m */, + 821A4D861BF6DA2700E675DB /* UIScrollView+Helpers.h */, + 821A4D871BF6DA2700E675DB /* UIScrollView+Helpers.m */, ); path = Categories; sourceTree = ""; @@ -328,16 +350,18 @@ buildActionMask = 2147483647; files = ( 82A893861BC6F939004C37E3 /* TLYMenuTableViewController.m in Sources */, + 821A4D8B1BF6E5D400E675DB /* TLYDelegateProxy.m in Sources */, 821A4D7B1BF6D01600E675DB /* TLYTableViewController.m in Sources */, 8268FA13194DBA58004EC0E4 /* TLYShyNavBarManager.m in Sources */, 82C882091955FDA60046C49D /* UIViewController+BetterLayoutGuides.m in Sources */, + 821A4D7F1BF6D70100E675DB /* TLYShyStatusBarController.m in Sources */, 828F57301949C37B009EB8DD /* TLYAppDelegate.m in Sources */, - 82B01ED3195D449F00C3C10C /* TLYDelegateProxy.m in Sources */, - 8268FA02194C926F004EC0E4 /* TLYShyViewController.m in Sources */, 829FEE001957DF620017E186 /* NSObject+TLYSwizzlingHelpers.m in Sources */, 828F57361949C37B009EB8DD /* TLYViewController.m in Sources */, + 821A4D841BF6D89E00E675DB /* TLYShyViewController.m in Sources */, 8262C8551BD730DD00B610A0 /* TLYCollectionViewController.m in Sources */, 828F572C1949C37B009EB8DD /* main.m in Sources */, + 821A4D881BF6DA2700E675DB /* UIScrollView+Helpers.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };