diff --git a/SlideMenu.xcodeproj/project.pbxproj b/SlideMenu.xcodeproj/project.pbxproj index b05d5e0..5daa3ca 100644 --- a/SlideMenu.xcodeproj/project.pbxproj +++ b/SlideMenu.xcodeproj/project.pbxproj @@ -18,12 +18,18 @@ 15371EF91728E3B400A508F4 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 15371EF81728E3B400A508F4 /* Default-568h@2x.png */; }; 15371EFC1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 15371EFA1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard */; }; 15371EFF1728E3B400A508F4 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 15371EFD1728E3B400A508F4 /* MainStoryboard_iPad.storyboard */; }; - 15371F021728E3B400A508F4 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F011728E3B400A508F4 /* ViewController.m */; }; 15371F0A1728E3B400A508F4 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371F091728E3B400A508F4 /* SenTestingKit.framework */; }; 15371F0B1728E3B400A508F4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371EE21728E3B400A508F4 /* UIKit.framework */; }; 15371F0C1728E3B400A508F4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371EE41728E3B400A508F4 /* Foundation.framework */; }; 15371F141728E3B400A508F4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 15371F121728E3B400A508F4 /* InfoPlist.strings */; }; 15371F171728E3B400A508F4 /* SlideMenuTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F161728E3B400A508F4 /* SlideMenuTests.m */; }; + 15371F281728E44E00A508F4 /* SlideNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F271728E44E00A508F4 /* SlideNavigationController.m */; }; + 15CBD67C172A15F900F0C53E /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD677172A15F900F0C53E /* HomeViewController.m */; }; + 15CBD67D172A15F900F0C53E /* MenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD679172A15F900F0C53E /* MenuViewController.m */; }; + 15CBD67E172A15F900F0C53E /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD67B172A15F900F0C53E /* ProfileViewController.m */; }; + 15CBD684172A20DA00F0C53E /* left-menu-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 15CBD682172A20DA00F0C53E /* left-menu-button.png */; }; + 15CBD685172A20DA00F0C53E /* right-menu-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 15CBD683172A20DA00F0C53E /* right-menu-button.png */; }; + 15CBD689172A22B700F0C53E /* ProfileDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD688172A22B700F0C53E /* ProfileDetailViewController.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -52,14 +58,24 @@ 15371EF81728E3B400A508F4 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 15371EFB1728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = ""; }; 15371EFE1728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = ""; }; - 15371F001728E3B400A508F4 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 15371F011728E3B400A508F4 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 15371F081728E3B400A508F4 /* SlideMenuTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideMenuTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; 15371F091728E3B400A508F4 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; 15371F111728E3B400A508F4 /* SlideMenuTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SlideMenuTests-Info.plist"; sourceTree = ""; }; 15371F131728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 15371F151728E3B400A508F4 /* SlideMenuTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlideMenuTests.h; sourceTree = ""; }; 15371F161728E3B400A508F4 /* SlideMenuTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlideMenuTests.m; sourceTree = ""; }; + 15371F261728E44E00A508F4 /* SlideNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationController.h; sourceTree = ""; }; + 15371F271728E44E00A508F4 /* SlideNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationController.m; sourceTree = ""; }; + 15CBD676172A15F900F0C53E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; + 15CBD677172A15F900F0C53E /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; + 15CBD678172A15F900F0C53E /* MenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuViewController.h; sourceTree = ""; }; + 15CBD679172A15F900F0C53E /* MenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuViewController.m; sourceTree = ""; }; + 15CBD67A172A15F900F0C53E /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = ""; }; + 15CBD67B172A15F900F0C53E /* ProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = ""; }; + 15CBD682172A20DA00F0C53E /* left-menu-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "left-menu-button.png"; sourceTree = ""; }; + 15CBD683172A20DA00F0C53E /* right-menu-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "right-menu-button.png"; sourceTree = ""; }; + 15CBD687172A22B600F0C53E /* ProfileDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileDetailViewController.h; sourceTree = ""; }; + 15CBD688172A22B700F0C53E /* ProfileDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileDetailViewController.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -119,12 +135,12 @@ 15371EE81728E3B400A508F4 /* SlideMenu */ = { isa = PBXGroup; children = ( + 15CBD675172A15F900F0C53E /* Helper Classes */, + 15371F241728E43600A508F4 /* Source */, 15371EF11728E3B400A508F4 /* AppDelegate.h */, 15371EF21728E3B400A508F4 /* AppDelegate.m */, 15371EFA1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard */, 15371EFD1728E3B400A508F4 /* MainStoryboard_iPad.storyboard */, - 15371F001728E3B400A508F4 /* ViewController.h */, - 15371F011728E3B400A508F4 /* ViewController.m */, 15371EE91728E3B400A508F4 /* Supporting Files */, ); path = SlideMenu; @@ -163,6 +179,40 @@ name = "Supporting Files"; sourceTree = ""; }; + 15371F241728E43600A508F4 /* Source */ = { + isa = PBXGroup; + children = ( + 15CBD681172A209500F0C53E /* Assets */, + 15371F261728E44E00A508F4 /* SlideNavigationController.h */, + 15371F271728E44E00A508F4 /* SlideNavigationController.m */, + ); + path = Source; + sourceTree = ""; + }; + 15CBD675172A15F900F0C53E /* Helper Classes */ = { + isa = PBXGroup; + children = ( + 15CBD676172A15F900F0C53E /* HomeViewController.h */, + 15CBD677172A15F900F0C53E /* HomeViewController.m */, + 15CBD678172A15F900F0C53E /* MenuViewController.h */, + 15CBD679172A15F900F0C53E /* MenuViewController.m */, + 15CBD67A172A15F900F0C53E /* ProfileViewController.h */, + 15CBD67B172A15F900F0C53E /* ProfileViewController.m */, + 15CBD687172A22B600F0C53E /* ProfileDetailViewController.h */, + 15CBD688172A22B700F0C53E /* ProfileDetailViewController.m */, + ); + path = "Helper Classes"; + sourceTree = ""; + }; + 15CBD681172A209500F0C53E /* Assets */ = { + isa = PBXGroup; + children = ( + 15CBD682172A20DA00F0C53E /* left-menu-button.png */, + 15CBD683172A20DA00F0C53E /* right-menu-button.png */, + ); + path = Assets; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -240,6 +290,8 @@ 15371EF91728E3B400A508F4 /* Default-568h@2x.png in Resources */, 15371EFC1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard in Resources */, 15371EFF1728E3B400A508F4 /* MainStoryboard_iPad.storyboard in Resources */, + 15CBD684172A20DA00F0C53E /* left-menu-button.png in Resources */, + 15CBD685172A20DA00F0C53E /* right-menu-button.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -276,7 +328,11 @@ files = ( 15371EEF1728E3B400A508F4 /* main.m in Sources */, 15371EF31728E3B400A508F4 /* AppDelegate.m in Sources */, - 15371F021728E3B400A508F4 /* ViewController.m in Sources */, + 15371F281728E44E00A508F4 /* SlideNavigationController.m in Sources */, + 15CBD67C172A15F900F0C53E /* HomeViewController.m in Sources */, + 15CBD67D172A15F900F0C53E /* MenuViewController.m in Sources */, + 15CBD67E172A15F900F0C53E /* ProfileViewController.m in Sources */, + 15CBD689172A22B700F0C53E /* ProfileDetailViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -460,6 +516,7 @@ 15371F1C1728E3B400A508F4 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 15371F1D1728E3B400A508F4 /* Build configuration list for PBXNativeTarget "SlideMenuTests" */ = { isa = XCConfigurationList; @@ -468,6 +525,7 @@ 15371F1F1728E3B400A508F4 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/SlideMenu/AppDelegate.h b/SlideMenu/AppDelegate.h index 82ac8c5..70b624f 100644 --- a/SlideMenu/AppDelegate.h +++ b/SlideMenu/AppDelegate.h @@ -7,6 +7,8 @@ // #import +#import "SlideNavigationController.h" +#import "MenuViewController.h" @interface AppDelegate : UIResponder diff --git a/SlideMenu/AppDelegate.m b/SlideMenu/AppDelegate.m index 24917c1..9eb3e19 100644 --- a/SlideMenu/AppDelegate.m +++ b/SlideMenu/AppDelegate.m @@ -12,6 +12,18 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" + bundle: nil]; + + MenuViewController *rightMenu = (MenuViewController*)[mainStoryboard + instantiateViewControllerWithIdentifier: @"MenuViewController"]; + + MenuViewController *leftMenu = (MenuViewController*)[mainStoryboard + instantiateViewControllerWithIdentifier: @"MenuViewController"]; + + [SlideNavigationController sharedInstance].righMenu = rightMenu; + [SlideNavigationController sharedInstance].leftMenu = leftMenu; + // Override point for customization after application launch. return YES; } diff --git a/SlideMenu/Helper Classes/HomeViewController.h b/SlideMenu/Helper Classes/HomeViewController.h new file mode 100644 index 0000000..0afd2cb --- /dev/null +++ b/SlideMenu/Helper Classes/HomeViewController.h @@ -0,0 +1,14 @@ +// +// HomeViewController.h +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import +#import "SlideNavigationController.h" + +@interface HomeViewController : UIViewController + +@end diff --git a/SlideMenu/Helper Classes/HomeViewController.m b/SlideMenu/Helper Classes/HomeViewController.m new file mode 100644 index 0000000..70eaf52 --- /dev/null +++ b/SlideMenu/Helper Classes/HomeViewController.m @@ -0,0 +1,30 @@ +// +// HomeViewController.m +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import "HomeViewController.h" + +@implementation HomeViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; +} + +#pragma mark - SlideNavigationController Methods - + +- (BOOL)slideNavigationControllerShouldSisplayLeftMenu +{ + return YES; +} + +- (BOOL)slideNavigationControllerShouldSisplayRightMenu +{ + return YES; +} + +@end diff --git a/SlideMenu/ViewController.h b/SlideMenu/Helper Classes/MenuViewController.h similarity index 52% rename from SlideMenu/ViewController.h rename to SlideMenu/Helper Classes/MenuViewController.h index 85bc0bf..59be1e9 100644 --- a/SlideMenu/ViewController.h +++ b/SlideMenu/Helper Classes/MenuViewController.h @@ -1,5 +1,5 @@ // -// ViewController.h +// MenuViewController.h // SlideMenu // // Created by Aryan Gh on 4/24/13. @@ -7,7 +7,9 @@ // #import +#import "SlideNavigationController.h" + +@interface MenuViewController : UIViewController -@interface ViewController : UIViewController @end diff --git a/SlideMenu/Helper Classes/MenuViewController.m b/SlideMenu/Helper Classes/MenuViewController.m new file mode 100644 index 0000000..f6d24dc --- /dev/null +++ b/SlideMenu/Helper Classes/MenuViewController.m @@ -0,0 +1,54 @@ +// +// MenuViewController.m +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import "MenuViewController.h" + +@implementation MenuViewController + +#pragma mark - UITableView Delegate & Datasrouce - + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 3; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *identifier = @"menuCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; + + switch (indexPath.row) + { + case 0: + cell.detailTextLabel.text = @"Home"; + break; + + case 1: + cell.detailTextLabel.text = @"Profile"; + break; + + case 2: + cell.detailTextLabel.text = @"Friends"; + break; + } + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" + bundle: nil]; + + UIViewController *vc = (MenuViewController*)[mainStoryboard + instantiateViewControllerWithIdentifier: @"ProfileViewController"]; + + [[SlideNavigationController sharedInstance] switchViewController:vc withCompletion:nil]; +} + +@end diff --git a/SlideMenu/Helper Classes/ProfileDetailViewController.h b/SlideMenu/Helper Classes/ProfileDetailViewController.h new file mode 100644 index 0000000..cc0258d --- /dev/null +++ b/SlideMenu/Helper Classes/ProfileDetailViewController.h @@ -0,0 +1,14 @@ +// +// ProfileDetailViewController.h +// SlideMenu +// +// Created by Aryan Gh on 4/25/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import +#import "SlideNavigationController.h" + +@interface ProfileDetailViewController : UIViewController + +@end diff --git a/SlideMenu/Helper Classes/ProfileDetailViewController.m b/SlideMenu/Helper Classes/ProfileDetailViewController.m new file mode 100644 index 0000000..9727042 --- /dev/null +++ b/SlideMenu/Helper Classes/ProfileDetailViewController.m @@ -0,0 +1,30 @@ +// +// ProfileDetailViewController.m +// SlideMenu +// +// Created by Aryan Gh on 4/25/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import "ProfileDetailViewController.h" + +@implementation ProfileDetailViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; +} + +#pragma mark - SlideNavigationController Methods - + +- (BOOL)slideNavigationControllerShouldSisplayLeftMenu +{ + return NO; +} + +- (BOOL)slideNavigationControllerShouldSisplayRightMenu +{ + return YES; +} + +@end diff --git a/SlideMenu/Helper Classes/ProfileViewController.h b/SlideMenu/Helper Classes/ProfileViewController.h new file mode 100644 index 0000000..4d3f038 --- /dev/null +++ b/SlideMenu/Helper Classes/ProfileViewController.h @@ -0,0 +1,14 @@ +// +// ProfileViewController.h +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import +#import "SlideNavigationController.h" + +@interface ProfileViewController : UIViewController + +@end diff --git a/SlideMenu/Helper Classes/ProfileViewController.m b/SlideMenu/Helper Classes/ProfileViewController.m new file mode 100644 index 0000000..415b9d2 --- /dev/null +++ b/SlideMenu/Helper Classes/ProfileViewController.m @@ -0,0 +1,30 @@ +// +// ProfileViewController.m +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import "ProfileViewController.h" + +@implementation ProfileViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; +} + +#pragma mark - SlideNavigationController Methods - + +- (BOOL)slideNavigationControllerShouldSisplayLeftMenu +{ + return YES; +} + +- (BOOL)slideNavigationControllerShouldSisplayRightMenu +{ + return YES; +} + +@end diff --git a/SlideMenu/Source/Assets/left-menu-button.png b/SlideMenu/Source/Assets/left-menu-button.png new file mode 100644 index 0000000..cf504cd Binary files /dev/null and b/SlideMenu/Source/Assets/left-menu-button.png differ diff --git a/SlideMenu/Source/Assets/right-menu-button.png b/SlideMenu/Source/Assets/right-menu-button.png new file mode 100644 index 0000000..cf504cd Binary files /dev/null and b/SlideMenu/Source/Assets/right-menu-button.png differ diff --git a/SlideMenu/Source/SlideNavigationController.h b/SlideMenu/Source/SlideNavigationController.h new file mode 100644 index 0000000..bb0135d --- /dev/null +++ b/SlideMenu/Source/SlideNavigationController.h @@ -0,0 +1,25 @@ +// +// SlideNavigationController.h +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import + +@protocol SlideNavigationControllerDelegate +@optional +- (BOOL)slideNavigationControllerShouldSisplayRightMenu; +- (BOOL)slideNavigationControllerShouldSisplayLeftMenu; +@end + +@interface SlideNavigationController : UINavigationController + +@property (nonatomic, strong) UIViewController *righMenu; +@property (nonatomic, strong) UIViewController *leftMenu; + ++ (SlideNavigationController *)sharedInstance; +- (void)switchViewController:(UIViewController *)viewController withCompletion:(void (^)())completion; + +@end diff --git a/SlideMenu/Source/SlideNavigationController.m b/SlideMenu/Source/SlideNavigationController.m new file mode 100644 index 0000000..e1e11b6 --- /dev/null +++ b/SlideMenu/Source/SlideNavigationController.m @@ -0,0 +1,174 @@ +// +// SlideNavigationController.m +// SlideMenu +// +// Created by Aryan Gh on 4/24/13. +// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. +// + +#import "SlideNavigationController.h" + +@implementation SlideNavigationController +@synthesize righMenu; +@synthesize leftMenu; + +#define MENU_OFFSET 60 +#define MENU_SLIDE_ANIMATION_DURATION 0.3 + +static SlideNavigationController *singletonInstance; + +#pragma mark - Initialization - + ++ (SlideNavigationController *)sharedInstance +{ + return singletonInstance; +} + +- (void)awakeFromNib +{ + singletonInstance = self; + self.delegate = self; +} + +- (id)init +{ + if (self = [super init]) + { + singletonInstance = self; + } + + return self; +} + +#pragma mark - Public Methods - + +- (void)switchViewController:(UIViewController *)viewController withCompletion:(void (^)())completion +{ + __block CGRect rect = self.view.frame; + + if ([self isMenuOpen]) + { + [UIView animateWithDuration:MENU_SLIDE_ANIMATION_DURATION animations:^{ + rect.origin.x = (rect.origin.x > 0) ? rect.size.width : -1*rect.size.width; + self.view.frame = rect; + } completion:^(BOOL finished) { + + [UIView animateWithDuration:MENU_SLIDE_ANIMATION_DURATION animations:^{ + rect.origin.x = 0; + self.view.frame = rect; + + [self popToRootViewControllerAnimated:NO]; + [self pushViewController:viewController animated:NO]; + + if (completion) + completion(); + }]; + }]; + } + else + { + [self popToRootViewControllerAnimated:NO]; + [self pushViewController:viewController animated:YES]; + + if (completion) + completion(); + } +} + +#pragma mark - Private Methods - + +- (UIBarButtonItem *)leftBarButton +{ + return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks + target:self + action:@selector(leftMenuSelected:)]; +} + +- (UIBarButtonItem *)rightBarButton +{ + return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks + target:self + action:@selector(righttMenuSelected:)]; +} + +- (BOOL)isMenuOpen +{ + return (self.view.frame.origin.x == 0) ? NO : YES; +} + +- (BOOL)shouldDisplayRightMenuButtonForViewController:(UIViewController *)vc +{ + if ([vc respondsToSelector:@selector(slideNavigationControllerShouldSisplayRightMenu)] && + [(UIViewController *)vc slideNavigationControllerShouldSisplayRightMenu]) + { + return YES; + } + + return NO; +} + +- (BOOL)shouldDisplayLeftMenuButtonForViewController:(UIViewController *)vc +{ + if ([vc respondsToSelector:@selector(slideNavigationControllerShouldSisplayLeftMenu)] && + [(UIViewController *)vc slideNavigationControllerShouldSisplayLeftMenu]) + { + return YES; + } + + return NO; +} + +#pragma mark - UINavigationControllerDelegate Methods - + +- (void)navigationController:(UINavigationController *)navigationController + willShowViewController:(UIViewController *)viewController + animated:(BOOL)animated +{ + if ([self shouldDisplayLeftMenuButtonForViewController:viewController]) + viewController.navigationItem.leftBarButtonItem = [self leftBarButton]; + else + viewController.navigationItem.leftBarButtonItem = nil; + + if ([self shouldDisplayRightMenuButtonForViewController:viewController]) + viewController.navigationItem.rightBarButtonItem = [self rightBarButton]; + else + viewController.navigationItem.rightBarButtonItem = nil; +} + +#pragma mark - IBActions - + +- (void)leftMenuSelected:(id)sender +{ + [self.righMenu.view removeFromSuperview]; + [self.view.window insertSubview:self.leftMenu.view atIndex:0]; + + [UIView animateWithDuration:MENU_SLIDE_ANIMATION_DURATION + animations:^{ + CGRect rect = self.view.frame; + rect.origin.x = (self.isMenuOpen) ? 0 : rect.size.width - MENU_OFFSET; + self.view.frame = rect; + + } + completion:^(BOOL finished) { + + }]; +} + +- (void)righttMenuSelected:(id)sender +{ + [self.leftMenu.view removeFromSuperview]; + [self.view.window insertSubview:self.righMenu.view atIndex:0]; + + [UIView animateWithDuration:MENU_SLIDE_ANIMATION_DURATION + animations:^{ + CGRect rect = self.view.frame; + rect.origin.x = (self.isMenuOpen) ? 0 : (rect.size.width - MENU_OFFSET )* -1; + self.view.frame = rect; + + } + completion:^(BOOL finished) { + + }]; +} + +@end diff --git a/SlideMenu/ViewController.m b/SlideMenu/ViewController.m deleted file mode 100644 index 136b372..0000000 --- a/SlideMenu/ViewController.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// ViewController.m -// SlideMenu -// -// Created by Aryan Gh on 4/24/13. -// Copyright (c) 2013 Aryan Ghassemi. All rights reserved. -// - -#import "ViewController.h" - -@interface ViewController () - -@end - -@implementation ViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -@end diff --git a/SlideMenu/en.lproj/MainStoryboard_iPhone.storyboard b/SlideMenu/en.lproj/MainStoryboard_iPhone.storyboard index c9acc6d..343bda0 100644 --- a/SlideMenu/en.lproj/MainStoryboard_iPhone.storyboard +++ b/SlideMenu/en.lproj/MainStoryboard_iPhone.storyboard @@ -1,23 +1,176 @@ - + - + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + +