From fa1a11995c10a4bb1f9f1315994a25b058ebedb0 Mon Sep 17 00:00:00 2001 From: Aryan Gh Date: Thu, 25 Apr 2013 22:34:42 -0700 Subject: [PATCH] - Initial Commot --- SlideMenu.xcodeproj/project.pbxproj | 70 ++++++- SlideMenu/AppDelegate.h | 2 + SlideMenu/AppDelegate.m | 12 ++ SlideMenu/Helper Classes/HomeViewController.h | 14 ++ SlideMenu/Helper Classes/HomeViewController.m | 30 +++ .../MenuViewController.h} | 6 +- SlideMenu/Helper Classes/MenuViewController.m | 54 ++++++ .../ProfileDetailViewController.h | 14 ++ .../ProfileDetailViewController.m | 30 +++ .../Helper Classes/ProfileViewController.h | 14 ++ .../Helper Classes/ProfileViewController.m | 30 +++ SlideMenu/Source/Assets/left-menu-button.png | Bin 0 -> 9260 bytes SlideMenu/Source/Assets/right-menu-button.png | Bin 0 -> 9260 bytes SlideMenu/Source/SlideNavigationController.h | 25 +++ SlideMenu/Source/SlideNavigationController.m | 174 ++++++++++++++++++ SlideMenu/ViewController.m | 29 --- .../en.lproj/MainStoryboard_iPhone.storyboard | 169 ++++++++++++++++- 17 files changed, 628 insertions(+), 45 deletions(-) create mode 100644 SlideMenu/Helper Classes/HomeViewController.h create mode 100644 SlideMenu/Helper Classes/HomeViewController.m rename SlideMenu/{ViewController.h => Helper Classes/MenuViewController.h} (52%) create mode 100644 SlideMenu/Helper Classes/MenuViewController.m create mode 100644 SlideMenu/Helper Classes/ProfileDetailViewController.h create mode 100644 SlideMenu/Helper Classes/ProfileDetailViewController.m create mode 100644 SlideMenu/Helper Classes/ProfileViewController.h create mode 100644 SlideMenu/Helper Classes/ProfileViewController.m create mode 100644 SlideMenu/Source/Assets/left-menu-button.png create mode 100644 SlideMenu/Source/Assets/right-menu-button.png create mode 100644 SlideMenu/Source/SlideNavigationController.h create mode 100644 SlideMenu/Source/SlideNavigationController.m delete mode 100644 SlideMenu/ViewController.m 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 0000000000000000000000000000000000000000..cf504cd7e61edfa56d5133f91acae0267ef65204 GIT binary patch literal 9260 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 VDJvI`H2-|tWxgs(RErq|{vUkH=^g+8 literal 0 HcmV?d00001 diff --git a/SlideMenu/Source/Assets/right-menu-button.png b/SlideMenu/Source/Assets/right-menu-button.png new file mode 100644 index 0000000000000000000000000000000000000000..cf504cd7e61edfa56d5133f91acae0267ef65204 GIT binary patch literal 9260 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 VDJvI`H2-|tWxgs(RErq|{vUkH=^g+8 literal 0 HcmV?d00001 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 @@ - + - + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + +