Compare commits

..

No commits in common. "master" and "1.4.5" have entirely different histories.

6 changed files with 96 additions and 118 deletions

View File

@ -525,7 +525,6 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch"; GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist"; INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
@ -537,7 +536,6 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch"; GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist"; INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };

View File

@ -42,11 +42,6 @@
NSLog(@"Opened %@", menu); NSLog(@"Opened %@", menu);
}]; }];
[[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerWillOpen object:nil queue:nil usingBlock:^(NSNotification *note) {
NSString *menu = note.userInfo[@"menu"];
NSLog(@"Opening %@", menu);
}];
[[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerDidReveal object:nil queue:nil usingBlock:^(NSNotification *note) { [[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerDidReveal object:nil queue:nil usingBlock:^(NSNotification *note) {
NSString *menu = note.userInfo[@"menu"]; NSString *menu = note.userInfo[@"menu"];
NSLog(@"Revealed %@", menu); NSLog(@"Revealed %@", menu);

View File

@ -9,7 +9,7 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.aryaxt.$(PRODUCT_NAME:rfc1034identifier)</string> <string>com.aryaxt.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>

View File

@ -48,8 +48,6 @@ extern NSString * const SlideNavigationControllerDidOpen;
extern NSString *const SlideNavigationControllerDidClose; extern NSString *const SlideNavigationControllerDidClose;
extern NSString *const SlideNavigationControllerDidReveal; extern NSString *const SlideNavigationControllerDidReveal;
extern NSString *const SlideMenuOpenAfterSwipeKey;
@property (nonatomic, assign) BOOL avoidSwitchingToSameClassViewController; @property (nonatomic, assign) BOOL avoidSwitchingToSameClassViewController;
@property (nonatomic, assign) BOOL enableSwipeGesture; @property (nonatomic, assign) BOOL enableSwipeGesture;
@property (nonatomic, assign) BOOL enableShadow; @property (nonatomic, assign) BOOL enableShadow;
@ -60,8 +58,7 @@ extern NSString *const SlideMenuOpenAfterSwipeKey;
@property (nonatomic, assign) CGFloat portraitSlideOffset; @property (nonatomic, assign) CGFloat portraitSlideOffset;
@property (nonatomic, assign) CGFloat landscapeSlideOffset; @property (nonatomic, assign) CGFloat landscapeSlideOffset;
@property (nonatomic, assign) CGFloat panGestureSideOffset; @property (nonatomic, assign) CGFloat panGestureSideOffset;
@property (nonatomic, assign) CGFloat menuOpenAnimationDuration; @property (nonatomic, assign) CGFloat menuRevealAnimationDuration;
@property (nonatomic, assign) CGFloat menuCloseAnimationDuration;
@property (nonatomic, assign) UIViewAnimationOptions menuRevealAnimationOption; @property (nonatomic, assign) UIViewAnimationOptions menuRevealAnimationOption;
@property (nonatomic, strong) id <SlideNavigationContorllerAnimator> menuRevealAnimator; @property (nonatomic, strong) id <SlideNavigationContorllerAnimator> menuRevealAnimator;
@ -78,6 +75,4 @@ extern NSString *const SlideMenuOpenAfterSwipeKey;
- (void)toggleRightMenu; - (void)toggleRightMenu;
- (BOOL)isMenuOpen; - (BOOL)isMenuOpen;
- (void)prepareMenuForReveal:(Menu)menu;
@end @end

View File

@ -47,12 +47,8 @@ NSString * const SlideNavigationControllerDidOpen = @"SlideNavigationControllerD
NSString * const SlideNavigationControllerDidClose = @"SlideNavigationControllerDidClose"; NSString * const SlideNavigationControllerDidClose = @"SlideNavigationControllerDidClose";
NSString *const SlideNavigationControllerDidReveal = @"SlideNavigationControllerDidReveal"; NSString *const SlideNavigationControllerDidReveal = @"SlideNavigationControllerDidReveal";
NSString *const SlideMenuOpenAfterSwipeKey = @"SlideMenuOpenAfterSwipeKey";
#define MENU_SLIDE_ANIMATION_DURATION .3 #define MENU_SLIDE_ANIMATION_DURATION .3
#define MENU_SLIDE_OPEN_ANIMATION_DURATION .4 #define MENU_SLIDE_ANIMATION_OPTION UIViewAnimationOptionCurveEaseOut
#define MENU_SLIDE_CLOSE_ANIMATION_DURATION .2
#define MENU_SLIDE_ANIMATION_OPTION UIViewAnimationOptionCurveLinear
#define MENU_QUICK_SLIDE_ANIMATION_DURATION .18 #define MENU_QUICK_SLIDE_ANIMATION_DURATION .18
#define MENU_IMAGE @"menu-button" #define MENU_IMAGE @"menu-button"
#define MENU_SHADOW_RADIUS 10 #define MENU_SHADOW_RADIUS 10
@ -123,8 +119,7 @@ static SlideNavigationController *singletonInstance;
singletonInstance = self; singletonInstance = self;
self.menuOpenAnimationDuration = MENU_SLIDE_OPEN_ANIMATION_DURATION; self.menuRevealAnimationDuration = MENU_SLIDE_ANIMATION_DURATION;
self.menuCloseAnimationDuration = MENU_SLIDE_CLOSE_ANIMATION_DURATION;
self.menuRevealAnimationOption = MENU_SLIDE_ANIMATION_OPTION; self.menuRevealAnimationOption = MENU_SLIDE_ANIMATION_OPTION;
self.landscapeSlideOffset = MENU_DEFAULT_SLIDE_OFFSET; self.landscapeSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
self.portraitSlideOffset = MENU_DEFAULT_SLIDE_OFFSET; self.portraitSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
@ -145,7 +140,7 @@ static SlideNavigationController *singletonInstance;
// When menu open we disable user interaction // When menu open we disable user interaction
// When rotates we want to make sure that userInteraction is enabled again // When rotates we want to make sure that userInteraction is enabled again
//[self enableTapGestureToCloseMenu:NO]; [self enableTapGestureToCloseMenu:NO];
if (self.menuNeedsLayout) if (self.menuNeedsLayout)
{ {
@ -156,7 +151,7 @@ static SlideNavigationController *singletonInstance;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [self isMenuOpen]) if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [self isMenuOpen])
{ {
Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight; Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
[self openMenu:menu withCompletion:nil]; [self openMenu:menu withDuration:0 andCompletion:nil];
} }
self.menuNeedsLayout = NO; self.menuNeedsLayout = NO;
@ -213,7 +208,8 @@ static SlideNavigationController *singletonInstance;
} }
- (void)switchToViewController:(UIViewController *)viewController - (void)switchToViewController:(UIViewController *)viewController
popType:(PopType)poptype withSlideOutAnimation:(BOOL)slideOutAnimation
popType:(PopType)poptype
andCompletion:(void (^)())completion andCompletion:(void (^)())completion
{ {
if (self.avoidSwitchingToSameClassViewController && [self.topViewController isKindOfClass:viewController.class]) if (self.avoidSwitchingToSameClassViewController && [self.topViewController isKindOfClass:viewController.class])
@ -221,87 +217,95 @@ static SlideNavigationController *singletonInstance;
[self closeMenuWithCompletion:completion]; [self closeMenuWithCompletion:completion];
return; return;
} }
void (^switchAndCallCompletion)(BOOL) = ^(BOOL closeMenuBeforeCallingCompletion) { void (^switchAndCallCompletion)(BOOL) = ^(BOOL closeMenuBeforeCallingCompletion) {
if (poptype == PopTypeAll) { if (poptype == PopTypeAll) {
[self setViewControllers:@[viewController]]; [self setViewControllers:@[viewController]];
} }
else { else {
[super popToRootViewControllerAnimated:NO]; [super popToRootViewControllerAnimated:NO];
[super pushViewController:viewController animated:NO]; [super pushViewController:viewController animated:NO];
} }
if (closeMenuBeforeCallingCompletion) if (closeMenuBeforeCallingCompletion)
{ {
[self closeMenuWithCompletion:^{ [self closeMenuWithCompletion:^{
if (completion) if (completion)
completion(); completion();
}]; }];
} }
else else
{ {
if (completion) if (completion)
completion(); completion();
} }
}; };
// if ([self isMenuOpen]) if ([self isMenuOpen])
// { {
// if (slideOutAnimation) if (slideOutAnimation)
// { {
// [UIView animateWithDuration:(slideOutAnimation) ? self.menuRevealAnimationDuration : 0 [UIView animateWithDuration:(slideOutAnimation) ? self.menuRevealAnimationDuration : 0
// delay:0 delay:0
// options:self.menuRevealAnimationOption options:self.menuRevealAnimationOption
// animations:^{ animations:^{
// CGFloat width = self.horizontalSize; CGFloat width = self.horizontalSize;
// CGFloat moveLocation = (self.horizontalLocation> 0) ? width : -1*width; CGFloat moveLocation = (self.horizontalLocation> 0) ? width : -1*width;
// [self moveHorizontallyToLocation:moveLocation]; [self moveHorizontallyToLocation:moveLocation];
// } completion:^(BOOL finished) { } completion:^(BOOL finished) {
// switchAndCallCompletion(YES); switchAndCallCompletion(YES);
// }]; }];
// } }
// else else
// { {
// switchAndCallCompletion(YES); switchAndCallCompletion(YES);
// } }
// } }
// else else
// { {
// switchAndCallCompletion(NO); switchAndCallCompletion(NO);
// } }
switchAndCallCompletion([self isMenuOpen]);
} }
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion - (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion
{ {
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion]; [self switchToViewController:viewController withSlideOutAnimation:YES popType:PopTypeRoot andCompletion:completion];
} }
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController - (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
withSlideOutAnimation:(BOOL)slideOutAnimation withSlideOutAnimation:(BOOL)slideOutAnimation
andCompletion:(void (^)())completion andCompletion:(void (^)())completion
{ {
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion]; [self switchToViewController:viewController withSlideOutAnimation:slideOutAnimation popType:PopTypeRoot andCompletion:completion];
} }
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController - (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
withCompletion:(void (^)())completion withCompletion:(void (^)())completion
{ {
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion]; [self switchToViewController:viewController withSlideOutAnimation:YES popType:PopTypeRoot andCompletion:completion];
} }
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController - (void)popAllAndSwitchToViewController:(UIViewController *)viewController
withSlideOutAnimation:(BOOL)slideOutAnimation withSlideOutAnimation:(BOOL)slideOutAnimation
andCompletion:(void (^)())completion andCompletion:(void (^)())completion
{ {
[self switchToViewController:viewController popType:PopTypeAll andCompletion:completion]; [self switchToViewController:viewController withSlideOutAnimation:slideOutAnimation popType:PopTypeAll andCompletion:completion];
} }
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController - (void)popAllAndSwitchToViewController:(UIViewController *)viewController
withCompletion:(void (^)())completion withCompletion:(void (^)())completion
{ {
[self switchToViewController:viewController popType:PopTypeAll andCompletion:completion]; [self switchToViewController:viewController withSlideOutAnimation:YES popType:PopTypeAll andCompletion:completion];
}
- (void)closeMenuWithCompletion:(void (^)())completion
{
[self closeMenuWithDuration:self.menuRevealAnimationDuration andCompletion:completion];
}
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion
{
[self openMenu:menu withDuration:self.menuRevealAnimationDuration andCompletion:completion];
} }
- (void)toggleLeftMenu - (void)toggleLeftMenu
@ -468,23 +472,8 @@ static SlideNavigationController *singletonInstance;
return NO; return NO;
} }
- (CGFloat)openingPart - (void)openMenu:(Menu)menu withDuration:(float)duration andCompletion:(void (^)())completion
{ {
CGFloat slideOffset = self.slideOffset;
CGFloat absHorizontalLocation = (CGFloat)fabs(self.horizontalLocation);
return MIN(1.f, absHorizontalLocation/slideOffset);
}
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion
{
[self openMenu:menu afterSwipe:NO withCompletion:completion];
}
- (void)openMenu:(Menu)menu afterSwipe:(BOOL)afterSwipe withCompletion:(void (^)())completion
{
NSTimeInterval duration = self.menuOpenAnimationDuration * (1.f - [self openingPart]);
[self enableTapGestureToCloseMenu:YES]; [self enableTapGestureToCloseMenu:YES];
[self prepareMenuForReveal:menu]; [self prepareMenuForReveal:menu];
@ -502,16 +491,12 @@ static SlideNavigationController *singletonInstance;
if (completion) if (completion)
completion(); completion();
[self postNotificationWithName:SlideNavigationControllerDidOpen forMenu:menu withExtParams:@{ [self postNotificationWithName:SlideNavigationControllerDidOpen forMenu:menu];
SlideMenuOpenAfterSwipeKey : @(afterSwipe)
}];
}]; }];
} }
- (void)closeMenuWithCompletion:(void (^)())completion - (void)closeMenuWithDuration:(float)duration andCompletion:(void (^)())completion
{ {
NSTimeInterval duration = self.menuCloseAnimationDuration * [self openingPart];
[self enableTapGestureToCloseMenu:NO]; [self enableTapGestureToCloseMenu:NO];
Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight; Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
@ -670,17 +655,22 @@ static SlideNavigationController *singletonInstance;
- (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu - (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu
{ {
[self postNotificationWithName:name forMenu:menu withExtParams:nil]; NSString *menuString = (menu == MenuLeft) ? NOTIFICATION_USER_INFO_MENU_LEFT : NOTIFICATION_USER_INFO_MENU_RIGHT;
NSDictionary *userInfo = @{ NOTIFICATION_USER_INFO_MENU : menuString };
[[NSNotificationCenter defaultCenter] postNotificationName:name object:nil userInfo:userInfo];
} }
- (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu withExtParams:(NSDictionary *)extParams #pragma mark - UINavigationControllerDelegate Methods -
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{ {
NSMutableDictionary *userInfo = extParams ? [extParams mutableCopy] : [NSMutableDictionary dictionary]; if ([self shouldDisplayMenu:MenuLeft forViewController:viewController])
viewController.navigationItem.leftBarButtonItem = [self barButtonItemForMenu:MenuLeft];
NSString *menuString = (menu == MenuLeft) ? NOTIFICATION_USER_INFO_MENU_LEFT : NOTIFICATION_USER_INFO_MENU_RIGHT;
userInfo[NOTIFICATION_USER_INFO_MENU] = menuString; if ([self shouldDisplayMenu:MenuRight forViewController:viewController])
viewController.navigationItem.rightBarButtonItem = [self barButtonItemForMenu:MenuRight];
[[NSNotificationCenter defaultCenter] postNotificationName:name object:nil userInfo:[userInfo copy]];
} }
- (CGFloat)slideOffset - (CGFloat)slideOffset
@ -743,8 +733,8 @@ static SlideNavigationController *singletonInstance;
else else
currentMenu = (translation.x > 0) ? MenuLeft : MenuRight; currentMenu = (translation.x > 0) ? MenuLeft : MenuRight;
// if (![self shouldDisplayMenu:currentMenu forViewController:self.topViewController]) if (![self shouldDisplayMenu:currentMenu forViewController:self.topViewController])
// return; return;
[self prepareMenuForReveal:currentMenu]; [self prepareMenuForReveal:currentMenu];
@ -781,11 +771,11 @@ static SlideNavigationController *singletonInstance;
if (currentX > 0) if (currentX > 0)
{ {
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController]) if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil]; [self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight withDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
} }
else else
{ {
[self closeMenuWithCompletion:nil]; [self closeMenuWithDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
} }
} }
// Moving Left // Moving Left
@ -793,12 +783,12 @@ static SlideNavigationController *singletonInstance;
{ {
if (currentX > 0) if (currentX > 0)
{ {
[self closeMenuWithCompletion:nil]; [self closeMenuWithDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
} }
else else
{ {
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController]) if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil]; [self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight withDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
} }
} }
} }
@ -807,7 +797,7 @@ static SlideNavigationController *singletonInstance;
if (currentXOffset < (self.horizontalSize - self.slideOffset)/2) if (currentXOffset < (self.horizontalSize - self.slideOffset)/2)
[self closeMenuWithCompletion:nil]; [self closeMenuWithCompletion:nil];
else else
[self openMenu:(currentX > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil]; [self openMenu:(currentX > 0) ? MenuLeft : MenuRight withCompletion:nil];
} }
} }
} }

View File

@ -1,6 +1,6 @@
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'iOS-Slide-Menu' s.name = 'iOS-Slide-Menu'
s.version = '1.4.6' s.version = '1.4.5'
s.summary = 'A Slide Menu for iOS' s.summary = 'A Slide Menu for iOS'
s.homepage = 'https://github.com/aryaxt/iOS-Slide-Menu' s.homepage = 'https://github.com/aryaxt/iOS-Slide-Menu'
s.license = { s.license = {
@ -8,7 +8,7 @@ Pod::Spec.new do |s|
:file => 'License.txt' :file => 'License.txt'
} }
s.author = {'Aryan Ghassemi' => 'https://github.com/aryaxt/iOS-Slide-Menu'} s.author = {'Aryan Ghassemi' => 'https://github.com/aryaxt/iOS-Slide-Menu'}
s.source = {:git => 'https://github.com/aryaxt/iOS-Slide-Menu.git', :tag => '1.4.6'} s.source = {:git => 'https://github.com/aryaxt/iOS-Slide-Menu.git', :tag => '1.4.5'}
s.platform = :ios, '6.0' s.platform = :ios, '6.0'
s.source_files = 'SlideMenu/Source/*.{h,m}', 'SlideMenu/Source/Animations/*.{h,m}' s.source_files = 'SlideMenu/Source/*.{h,m}', 'SlideMenu/Source/Animations/*.{h,m}'
s.resources = ['SlideMenu/Source/Assets/**/*'] s.resources = ['SlideMenu/Source/Assets/**/*']