├── .gitignore ├── Demos ├── MFSideMenuDemoBasic │ ├── MFSideMenuDemoBasic.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ └── MFSideMenuDemoBasic │ │ ├── DemoViewController.h │ │ ├── DemoViewController.m │ │ ├── DemoViewController.xib │ │ ├── Images │ │ ├── Default-568h@2x.png │ │ ├── back-arrow.png │ │ ├── back-arrow@2x.png │ │ ├── menu-icon.png │ │ └── menu-icon@2x.png │ │ ├── MFAppDelegate.h │ │ ├── MFAppDelegate.m │ │ ├── MFSideMenuDemoBasic-Info.plist │ │ ├── MFSideMenuDemoBasic-Prefix.pch │ │ ├── SideMenuViewController.h │ │ ├── SideMenuViewController.m │ │ ├── en.lproj │ │ └── InfoPlist.strings │ │ └── main.m ├── MFSideMenuDemoSearchBar │ ├── MFSideMenuDemoSearchBar.xcodeproj │ │ └── project.pbxproj │ ├── MFSideMenuDemoSearchBar │ │ ├── Images │ │ │ ├── Default-568h@2x.png │ │ │ ├── Default.png │ │ │ ├── Default@2x.png │ │ │ ├── back-arrow.png │ │ │ ├── back-arrow@2x.png │ │ │ ├── menu-icon.png │ │ │ └── menu-icon@2x.png │ │ ├── MFAppDelegate.h │ │ ├── MFAppDelegate.m │ │ ├── MFSideMenuDemoSearchBar-Info.plist │ │ ├── MFSideMenuDemoSearchBar-Prefix.pch │ │ ├── View Controllers │ │ │ ├── DemoViewController.h │ │ │ ├── DemoViewController.m │ │ │ ├── DemoViewController.xib │ │ │ ├── SideMenuViewController.h │ │ │ └── SideMenuViewController.m │ │ ├── en.lproj │ │ │ └── InfoPlist.strings │ │ └── main.m │ └── Tests │ │ ├── Default-568h@2x.png │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── MFSideMenuContainerViewControllerTest.m │ │ ├── Tests-Info.plist │ │ ├── Tests-Prefix.pch │ │ ├── en.lproj │ │ └── InfoPlist.strings │ │ └── main.m ├── MFSideMenuDemoSplitViewController │ ├── MFSideMenuDemoSplitViewController.xcodeproj │ │ └── project.pbxproj │ └── MFSideMenuDemoSplitViewController │ │ ├── Default-568h@2x.png │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── MFAppDelegate.h │ │ ├── MFAppDelegate.m │ │ ├── MFDetailViewController.h │ │ ├── MFDetailViewController.m │ │ ├── MFMasterViewController.h │ │ ├── MFMasterViewController.m │ │ ├── MFSideMenuDemoSplitViewController-Info.plist │ │ ├── MFSideMenuDemoSplitViewController-Prefix.pch │ │ ├── SideMenuViewController.h │ │ ├── SideMenuViewController.m │ │ ├── en.lproj │ │ ├── InfoPlist.strings │ │ ├── MFDetailViewController.xib │ │ └── MFMasterViewController.xib │ │ └── main.m ├── MFSideMenuDemoStoryboard │ ├── MFSideMenuDemoStoryboard.xcodeproj │ │ └── project.pbxproj │ └── MFSideMenuDemoStoryboard │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── DemoViewController.h │ │ ├── DemoViewController.m │ │ ├── Images │ │ ├── Default-568h@2x.png │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── back-arrow.png │ │ ├── back-arrow@2x.png │ │ ├── menu-icon.png │ │ └── menu-icon@2x.png │ │ ├── MFSideMenuDemoStoryboard-Info.plist │ │ ├── MFSideMenuDemoStoryboard-Prefix.pch │ │ ├── SideMenuViewController.h │ │ ├── SideMenuViewController.m │ │ ├── en.lproj │ │ ├── InfoPlist.strings │ │ └── MainStoryboard.storyboard │ │ └── main.m └── MFSideMenuDemoUITabBarController │ ├── MFSideMenuDemoUITabBarController.xcodeproj │ └── project.pbxproj │ └── MFSideMenuDemoUITabBarController │ ├── DemoViewController.h │ ├── DemoViewController.m │ ├── DemoViewController.xib │ ├── Images │ ├── Default-568h@2x.png │ ├── back-arrow.png │ ├── back-arrow@2x.png │ ├── menu-icon.png │ └── menu-icon@2x.png │ ├── MFAppDelegate.h │ ├── MFAppDelegate.m │ ├── MFSideMenuDemoUITabBarController-Info.plist │ ├── MFSideMenuDemoUITabBarController-Prefix.pch │ ├── SideMenuViewController.h │ ├── SideMenuViewController.m │ ├── en.lproj │ └── InfoPlist.strings │ └── main.m ├── LICENSE ├── MFSideMenu.podspec ├── MFSideMenu.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── MFSideMenu.xccheckout ├── MFSideMenu ├── MFSideMenu.h ├── MFSideMenuContainerViewController.h ├── MFSideMenuContainerViewController.m ├── MFSideMenuShadow.h ├── MFSideMenuShadow.m ├── UIViewController+MFSideMenuAdditions.h └── UIViewController+MFSideMenuAdditions.m └── README.mdown /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.swp 3 | *~.nib 4 | 5 | build/ 6 | Pods/ 7 | 8 | *.pbxuser 9 | *.perspective 10 | *.perspectivev3 11 | *.mode1v3 12 | *.mode2v3 13 | xcuserdata/ 14 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/DemoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import 9 | 10 | @interface DemoViewController : UIViewController 11 | 12 | - (IBAction)pushAnotherPressed:(id)sender; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/DemoViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import "DemoViewController.h" 9 | #import "MFSideMenu.h" 10 | 11 | @implementation DemoViewController 12 | 13 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 14 | return YES; 15 | } 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | if(!self.title) self.title = @"Demo!"; 20 | 21 | [self setupMenuBarButtonItems]; 22 | } 23 | 24 | 25 | #pragma mark - 26 | #pragma mark - UIBarButtonItems 27 | 28 | - (void)setupMenuBarButtonItems { 29 | self.navigationItem.rightBarButtonItem = [self rightMenuBarButtonItem]; 30 | if(self.menuContainerViewController.menuState == MFSideMenuStateClosed && 31 | ![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) { 32 | self.navigationItem.leftBarButtonItem = [self backBarButtonItem]; 33 | } else { 34 | self.navigationItem.leftBarButtonItem = [self leftMenuBarButtonItem]; 35 | } 36 | } 37 | 38 | - (UIBarButtonItem *)leftMenuBarButtonItem { 39 | return [[UIBarButtonItem alloc] 40 | initWithImage:[UIImage imageNamed:@"menu-icon.png"] style:UIBarButtonItemStyleBordered 41 | target:self 42 | action:@selector(leftSideMenuButtonPressed:)]; 43 | } 44 | 45 | - (UIBarButtonItem *)rightMenuBarButtonItem { 46 | return [[UIBarButtonItem alloc] 47 | initWithImage:[UIImage imageNamed:@"menu-icon.png"] style:UIBarButtonItemStyleBordered 48 | target:self 49 | action:@selector(rightSideMenuButtonPressed:)]; 50 | } 51 | 52 | - (UIBarButtonItem *)backBarButtonItem { 53 | return [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back-arrow"] 54 | style:UIBarButtonItemStyleBordered 55 | target:self 56 | action:@selector(backButtonPressed:)]; 57 | } 58 | 59 | 60 | #pragma mark - 61 | #pragma mark - UIBarButtonItem Callbacks 62 | 63 | - (void)backButtonPressed:(id)sender { 64 | [self.navigationController popViewControllerAnimated:YES]; 65 | } 66 | 67 | - (void)leftSideMenuButtonPressed:(id)sender { 68 | [self.menuContainerViewController toggleLeftSideMenuCompletion:^{ 69 | [self setupMenuBarButtonItems]; 70 | }]; 71 | } 72 | 73 | - (void)rightSideMenuButtonPressed:(id)sender { 74 | [self.menuContainerViewController toggleRightSideMenuCompletion:^{ 75 | [self setupMenuBarButtonItems]; 76 | }]; 77 | } 78 | 79 | 80 | #pragma mark - 81 | #pragma mark - IBActions 82 | 83 | - (IBAction)pushAnotherPressed:(id)sender { 84 | DemoViewController *demoController = [[DemoViewController alloc] 85 | initWithNibName:@"DemoViewController" 86 | bundle:nil]; 87 | 88 | [self.navigationController pushViewController:demoController animated:YES]; 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/DemoViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1552 5 | 12C60 6 | 3084 7 | 1187.34 8 | 625.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 2083 12 | 13 | 14 | IBProxyObject 15 | IBUIButton 16 | IBUITextView 17 | IBUIView 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBCocoaTouchFramework 30 | 31 | 32 | IBFirstResponder 33 | IBCocoaTouchFramework 34 | 35 | 36 | 37 | 274 38 | 39 | 40 | 41 | 290 42 | {{20, 142}, {280, 37}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | IBCocoaTouchFramework 49 | 0 50 | 0 51 | 1 52 | Push Another Controller 53 | 54 | 3 55 | MQA 56 | 57 | 58 | 1 59 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 60 | 61 | 62 | 3 63 | MC41AA 64 | 65 | 66 | 2 67 | 15 68 | 69 | 70 | Helvetica-Bold 71 | 15 72 | 16 73 | 74 | 75 | 76 | 77 | 290 78 | {{20, 20}, {280, 102}} 79 | 80 | 81 | 82 | _NS:9 83 | 84 | 1 85 | MSAxIDEAA 86 | 87 | YES 88 | YES 89 | NO 90 | IBCocoaTouchFramework 91 | NO 92 | 93 | 94 | 2 95 | IBCocoaTouchFramework 96 | 97 | 98 | 1 99 | 14 100 | 101 | 102 | Helvetica 103 | 14 104 | 16 105 | 106 | 107 | 108 | {{0, 64}, {320, 504}} 109 | 110 | 111 | 112 | 113 | 3 114 | MQA 115 | 116 | 2 117 | 118 | 119 | 120 | 121 | NO 122 | 123 | 124 | IBUIScreenMetrics 125 | 126 | YES 127 | 128 | 129 | 130 | 131 | 132 | {320, 568} 133 | {568, 320} 134 | 135 | 136 | IBCocoaTouchFramework 137 | Retina 4 Full Screen 138 | 2 139 | 140 | IBCocoaTouchFramework 141 | 142 | 143 | 144 | 145 | 146 | 147 | view 148 | 149 | 150 | 151 | 4 152 | 153 | 154 | 155 | pushAnotherPressed: 156 | 157 | 158 | 7 159 | 160 | 6 161 | 162 | 163 | 164 | 165 | 166 | 0 167 | 168 | 169 | 170 | 171 | 172 | 1 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | -1 182 | 183 | 184 | File's Owner 185 | 186 | 187 | -2 188 | 189 | 190 | 191 | 192 | 5 193 | 194 | 195 | 196 | 197 | 198 | 7 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | DemoViewController 207 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 208 | UIResponder 209 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 210 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 211 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 212 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 213 | 214 | 215 | 216 | 217 | 218 | 18 219 | 220 | 221 | 222 | 223 | DemoViewController 224 | UIViewController 225 | 226 | pushAnotherPressed: 227 | id 228 | 229 | 230 | pushAnotherPressed: 231 | 232 | pushAnotherPressed: 233 | id 234 | 235 | 236 | 237 | IBProjectSource 238 | ./Classes/DemoViewController.h 239 | 240 | 241 | 242 | 243 | 0 244 | IBCocoaTouchFramework 245 | 246 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 247 | 248 | 249 | YES 250 | 3 251 | 2083 252 | 253 | 254 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/Default-568h@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/back-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/back-arrow.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/back-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/back-arrow@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/menu-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/menu-icon.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/menu-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/Images/menu-icon@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/MFAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import 9 | 10 | @interface MFAppDelegate : UIResponder 11 | 12 | @property (strong, nonatomic) UIWindow *window; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/MFAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.m 3 | // 4 | // Created by Michael Frederick on 4/4/13. 5 | // Copyright (c) 2013 Frederick Development. All rights reserved. 6 | // 7 | 8 | #import "MFAppDelegate.h" 9 | #import "DemoViewController.h" 10 | #import "SideMenuViewController.h" 11 | #import "MFSideMenuContainerViewController.h" 12 | 13 | @implementation MFAppDelegate 14 | 15 | - (DemoViewController *)demoController { 16 | return [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 17 | } 18 | 19 | - (UINavigationController *)navigationController { 20 | return [[UINavigationController alloc] 21 | initWithRootViewController:[self demoController]]; 22 | } 23 | 24 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 25 | { 26 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 27 | 28 | SideMenuViewController *leftMenuViewController = [[SideMenuViewController alloc] init]; 29 | SideMenuViewController *rightMenuViewController = [[SideMenuViewController alloc] init]; 30 | MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController 31 | containerWithCenterViewController:[self navigationController] 32 | leftMenuViewController:leftMenuViewController 33 | rightMenuViewController:rightMenuViewController]; 34 | self.window.rootViewController = container; 35 | [self.window makeKeyAndVisible]; 36 | 37 | return YES; 38 | } 39 | @end 40 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/MFSideMenuDemoBasic-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.mikefrederick.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationPortraitUpsideDown 36 | UIInterfaceOrientationLandscapeRight 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/MFSideMenuDemoBasic-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MFSideMenuDemo' target in the 'MFSideMenuDemo' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_3_0 8 | #warning "This project uses features only available in iOS SDK 3.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/SideMenuViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import 8 | 9 | @interface SideMenuViewController : UITableViewController 10 | 11 | @end -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/SideMenuViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import "SideMenuViewController.h" 8 | #import "MFSideMenu.h" 9 | #import "DemoViewController.h" 10 | 11 | @implementation SideMenuViewController 12 | 13 | #pragma mark - 14 | #pragma mark - UITableViewDataSource 15 | 16 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 17 | return [NSString stringWithFormat:@"Section %d", section]; 18 | } 19 | 20 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 21 | return 2; 22 | } 23 | 24 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 25 | return 10; 26 | } 27 | 28 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 29 | static NSString *CellIdentifier = @"Cell"; 30 | 31 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 32 | if (cell == nil) { 33 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 34 | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 35 | } 36 | 37 | cell.textLabel.text = [NSString stringWithFormat:@"Item %d", indexPath.row]; 38 | 39 | return cell; 40 | } 41 | 42 | #pragma mark - 43 | #pragma mark - UITableViewDelegate 44 | 45 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 46 | DemoViewController *demoController = [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 47 | demoController.title = [NSString stringWithFormat:@"Demo #%d-%d", indexPath.section, indexPath.row]; 48 | 49 | UINavigationController *navigationController = self.menuContainerViewController.centerViewController; 50 | NSArray *controllers = [NSArray arrayWithObject:demoController]; 51 | navigationController.viewControllers = controllers; 52 | [self.menuContainerViewController setMenuState:MFSideMenuStateClosed]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoBasic/MFSideMenuDemoBasic/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // Copyright (c) 2012 University of Wisconsin - Madison. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "MFAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([MFAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/Default-568h@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/Default.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/Default@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/back-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/back-arrow.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/back-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/back-arrow@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/menu-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/menu-icon.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/menu-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/Images/menu-icon@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/MFAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.h 3 | // 4 | // Created by Michael Frederick on 4/4/13. 5 | // Copyright (c) 2013 Frederick Development. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @class MFViewController; 11 | 12 | @interface MFAppDelegate : UIResponder 13 | 14 | @property (strong, nonatomic) UIWindow *window; 15 | 16 | @property (strong, nonatomic) MFViewController *viewController; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/MFAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.m 3 | // 4 | // Created by Michael Frederick on 4/4/13. 5 | // Copyright (c) 2013 Frederick Development. All rights reserved. 6 | // 7 | 8 | #import "MFAppDelegate.h" 9 | #import "DemoViewController.h" 10 | #import "SideMenuViewController.h" 11 | #import "MFSideMenuContainerViewController.h" 12 | 13 | @implementation MFAppDelegate 14 | 15 | - (DemoViewController *)demoController { 16 | return [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 17 | } 18 | 19 | - (UINavigationController *)navigationController { 20 | return [[UINavigationController alloc] 21 | initWithRootViewController:[self demoController]]; 22 | } 23 | 24 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 25 | { 26 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 27 | 28 | SideMenuViewController *leftSideMenuController = [[SideMenuViewController alloc] init]; 29 | SideMenuViewController *rightSideMenuController = [[SideMenuViewController alloc] init]; 30 | MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController 31 | containerWithCenterViewController:[self navigationController] 32 | leftMenuViewController:leftSideMenuController 33 | rightMenuViewController:rightSideMenuController]; 34 | self.window.rootViewController = container; 35 | [self.window makeKeyAndVisible]; 36 | 37 | return YES; 38 | } 39 | @end 40 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.frederickdevelopment.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MFSideMenuDemoViewControllerContainment' target in the 'MFSideMenuDemoViewControllerContainment' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_4_0 8 | #warning "This project uses features only available in iOS SDK 4.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/View Controllers/DemoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import 9 | 10 | @interface DemoViewController : UIViewController 11 | 12 | - (IBAction)pushAnotherPressed:(id)sender; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/View Controllers/DemoViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import "DemoViewController.h" 9 | #import "MFSideMenu.h" 10 | 11 | @implementation DemoViewController 12 | 13 | 14 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 15 | return YES; 16 | } 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | if(!self.title) self.title = @"Demo!"; 21 | 22 | [self setupMenuBarButtonItems]; 23 | } 24 | 25 | #pragma mark - 26 | #pragma mark - UIBarButtonItems 27 | 28 | - (void)setupMenuBarButtonItems { 29 | self.navigationItem.rightBarButtonItem = [self rightMenuBarButtonItem]; 30 | if(self.menuContainerViewController.menuState == MFSideMenuStateClosed && 31 | ![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) { 32 | self.navigationItem.leftBarButtonItem = [self backBarButtonItem]; 33 | } else { 34 | self.navigationItem.leftBarButtonItem = [self leftMenuBarButtonItem]; 35 | } 36 | } 37 | 38 | - (UIBarButtonItem *)leftMenuBarButtonItem { 39 | return [[UIBarButtonItem alloc] 40 | initWithImage:[UIImage imageNamed:@"menu-icon.png"] style:UIBarButtonItemStyleBordered 41 | target:self 42 | action:@selector(leftSideMenuButtonPressed:)]; 43 | } 44 | 45 | - (UIBarButtonItem *)rightMenuBarButtonItem { 46 | return [[UIBarButtonItem alloc] 47 | initWithImage:[UIImage imageNamed:@"menu-icon.png"] style:UIBarButtonItemStyleBordered 48 | target:self 49 | action:@selector(rightSideMenuButtonPressed:)]; 50 | } 51 | 52 | - (UIBarButtonItem *)backBarButtonItem { 53 | return [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back-arrow"] 54 | style:UIBarButtonItemStyleBordered 55 | target:self 56 | action:@selector(backButtonPressed:)]; 57 | } 58 | 59 | 60 | #pragma mark - 61 | #pragma mark - UIBarButtonItem Callbacks 62 | 63 | - (void)backButtonPressed:(id)sender { 64 | [self.navigationController popViewControllerAnimated:YES]; 65 | } 66 | 67 | - (void)leftSideMenuButtonPressed:(id)sender { 68 | [self.menuContainerViewController toggleLeftSideMenuCompletion:^{ 69 | [self setupMenuBarButtonItems]; 70 | }]; 71 | } 72 | 73 | - (void)rightSideMenuButtonPressed:(id)sender { 74 | [self.menuContainerViewController toggleRightSideMenuCompletion:^{ 75 | [self setupMenuBarButtonItems]; 76 | }]; 77 | } 78 | 79 | 80 | #pragma mark - 81 | #pragma mark - IBActions 82 | 83 | - (IBAction)pushAnotherPressed:(id)sender { 84 | DemoViewController *demoController = [[DemoViewController alloc] 85 | initWithNibName:@"DemoViewController" 86 | bundle:nil]; 87 | 88 | [self.navigationController pushViewController:demoController animated:YES]; 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/View Controllers/DemoViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1552 5 | 12D78 6 | 3084 7 | 1187.37 8 | 626.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 2083 12 | 13 | 14 | IBProxyObject 15 | IBUIButton 16 | IBUITextView 17 | IBUIView 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBCocoaTouchFramework 30 | 31 | 32 | IBFirstResponder 33 | IBCocoaTouchFramework 34 | 35 | 36 | 37 | 274 38 | 39 | 40 | 41 | 290 42 | {{20, 142}, {280, 37}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | IBCocoaTouchFramework 49 | 0 50 | 0 51 | 1 52 | Push Another Controller 53 | 54 | 3 55 | MQA 56 | 57 | 58 | 1 59 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 60 | 61 | 62 | 3 63 | MC41AA 64 | 65 | 66 | 2 67 | 15 68 | 69 | 70 | Helvetica-Bold 71 | 15 72 | 16 73 | 74 | 75 | 76 | 77 | 290 78 | {{20, 20}, {280, 102}} 79 | 80 | 81 | 82 | _NS:9 83 | 84 | 1 85 | MSAxIDEAA 86 | 87 | YES 88 | YES 89 | NO 90 | IBCocoaTouchFramework 91 | NO 92 | 93 | 94 | 2 95 | IBCocoaTouchFramework 96 | 97 | 98 | 1 99 | 14 100 | 101 | 102 | Helvetica 103 | 14 104 | 16 105 | 106 | 107 | 108 | {{0, 64}, {320, 504}} 109 | 110 | 111 | 112 | 113 | 3 114 | MQA 115 | 116 | 2 117 | 118 | 119 | 120 | 121 | NO 122 | 123 | 124 | IBUIScreenMetrics 125 | 126 | YES 127 | 128 | 129 | 130 | 131 | 132 | {320, 568} 133 | {568, 320} 134 | 135 | 136 | IBCocoaTouchFramework 137 | Retina 4 Full Screen 138 | 2 139 | 140 | IBCocoaTouchFramework 141 | 142 | 143 | 144 | 145 | 146 | 147 | view 148 | 149 | 150 | 151 | 4 152 | 153 | 154 | 155 | pushAnotherPressed: 156 | 157 | 158 | 7 159 | 160 | 6 161 | 162 | 163 | 164 | 165 | 166 | 0 167 | 168 | 169 | 170 | 171 | 172 | 1 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | -1 182 | 183 | 184 | File's Owner 185 | 186 | 187 | -2 188 | 189 | 190 | 191 | 192 | 5 193 | 194 | 195 | 196 | 197 | 198 | 7 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | DemoViewController 207 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 208 | UIResponder 209 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 210 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 211 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 212 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 213 | 214 | 215 | 216 | 217 | 218 | 18 219 | 220 | 221 | 222 | 223 | DemoViewController 224 | UIViewController 225 | 226 | id 227 | id 228 | id 229 | 230 | 231 | 232 | pushAnotherPressed: 233 | id 234 | 235 | 236 | showLeftMenuPressed: 237 | id 238 | 239 | 240 | showRightMenuPressed: 241 | id 242 | 243 | 244 | 245 | IBProjectSource 246 | ./Classes/DemoViewController.h 247 | 248 | 249 | 250 | 251 | 0 252 | IBCocoaTouchFramework 253 | 254 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 255 | 256 | 257 | YES 258 | 3 259 | 2083 260 | 261 | 262 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/View Controllers/SideMenuViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import 8 | 9 | @interface SideMenuViewController : UITableViewController 10 | 11 | @end -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/View Controllers/SideMenuViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import "SideMenuViewController.h" 8 | #import "MFSideMenu.h" 9 | #import "DemoViewController.h" 10 | 11 | @interface SideMenuViewController() 12 | @property(nonatomic, strong) UISearchBar *searchBar; 13 | @end 14 | 15 | @implementation SideMenuViewController 16 | 17 | @synthesize searchBar; 18 | 19 | - (void) viewDidLoad { 20 | [super viewDidLoad]; 21 | 22 | CGRect searchBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 45.0); 23 | self.searchBar = [[UISearchBar alloc] initWithFrame:searchBarFrame]; 24 | self.searchBar.delegate = self; 25 | 26 | self.tableView.tableHeaderView = self.searchBar; 27 | } 28 | 29 | #pragma mark - 30 | #pragma mark - UITableViewDataSource 31 | 32 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 33 | return [NSString stringWithFormat:@"Section %d", section]; 34 | } 35 | 36 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 37 | return 2; 38 | } 39 | 40 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 41 | return 10; 42 | } 43 | 44 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 45 | { 46 | static NSString *CellIdentifier = @"Cell"; 47 | 48 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 49 | if (cell == nil) { 50 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 51 | } 52 | 53 | cell.textLabel.text = [NSString stringWithFormat:@"Item %d", indexPath.row]; 54 | 55 | return cell; 56 | } 57 | 58 | 59 | #pragma mark - 60 | #pragma mark - UITableViewDelegate 61 | 62 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 63 | DemoViewController *demoController = [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 64 | demoController.title = [NSString stringWithFormat:@"Demo #%d-%d", indexPath.section, indexPath.row]; 65 | 66 | UINavigationController *navigationController = self.menuContainerViewController.centerViewController; 67 | NSArray *controllers = [NSArray arrayWithObject:demoController]; 68 | navigationController.viewControllers = controllers; 69 | [self.menuContainerViewController setMenuState:MFSideMenuStateClosed]; 70 | 71 | if(self.searchBar.isFirstResponder) [self.searchBar resignFirstResponder]; 72 | } 73 | 74 | 75 | #pragma mark - 76 | #pragma mark - UISearchBarDelegate 77 | 78 | - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { 79 | return YES; 80 | } 81 | 82 | - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { 83 | return YES; 84 | } 85 | 86 | - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 87 | [self.searchBar resignFirstResponder]; 88 | } 89 | 90 | - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 91 | [self.searchBar resignFirstResponder]; 92 | } 93 | 94 | - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 95 | [UIView beginAnimations:nil context:NULL]; 96 | [self.menuContainerViewController setMenuWidth:320.0f animated:NO]; 97 | [self.searchBar layoutSubviews]; 98 | [UIView commitAnimations]; 99 | 100 | [self.searchBar setShowsCancelButton:YES animated:YES]; 101 | 102 | self.menuContainerViewController.panMode = MFSideMenuPanModeNone; 103 | } 104 | 105 | - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { 106 | [UIView beginAnimations:nil context:NULL]; 107 | [self.menuContainerViewController setMenuWidth:280.0f animated:NO]; 108 | [self.searchBar layoutSubviews]; 109 | [UIView commitAnimations]; 110 | 111 | [self.searchBar setShowsCancelButton:NO animated:YES]; 112 | 113 | self.menuContainerViewController.panMode = MFSideMenuPanModeDefault; 114 | } 115 | 116 | @end 117 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/MFSideMenuDemoSearchBar/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // 4 | // Created by Michael Frederick on 4/4/13. 5 | // Copyright (c) 2013 Frederick Development. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | #import "MFAppDelegate.h" 11 | 12 | int main(int argc, char *argv[]) 13 | { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([MFAppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/Tests/Default-568h@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/Tests/Default.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSearchBar/Tests/Default@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/MFSideMenuContainerViewControllerTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFSideMenuContainerViewControllerTest.m 3 | // MFSideMenuDemoSearchBar 4 | // 5 | // Created by Michael Frederick on 5/3/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "MFSideMenuContainerViewController.h" 12 | #import "SideMenuViewController.h" 13 | #import "DemoViewController.h" 14 | 15 | typedef enum { 16 | MFSideMenuPanDirectionNone, 17 | MFSideMenuPanDirectionLeft, 18 | MFSideMenuPanDirectionRight 19 | } MFSideMenuPanDirection; 20 | 21 | @interface MFSideMenuContainerViewController() 22 | @property (nonatomic, strong) UIViewController *leftMenuViewController; 23 | @property (nonatomic, strong) UIViewController *centerViewController; 24 | @property (nonatomic, strong) UIViewController *rightMenuViewController; 25 | @property (nonatomic, strong) UIView *menuContainerView; 26 | @property (nonatomic, assign) CGPoint panGestureOrigin; 27 | @property (nonatomic, assign) CGFloat panGestureVelocity; 28 | @property (nonatomic, assign) MFSideMenuPanDirection panDirection; 29 | @end 30 | 31 | @interface MFSideMenuContainerViewControllerTest : GHTestCase 32 | @property (nonatomic, strong) MFSideMenuContainerViewController *container; 33 | @end 34 | 35 | 36 | @implementation MFSideMenuContainerViewControllerTest 37 | 38 | - (BOOL)shouldRunOnMainThread { 39 | // By default NO, but if you have a UI test or test dependent on running on the main thread return YES. 40 | // Also an async test that calls back on the main thread, you'll probably want to return YES. 41 | return NO; 42 | } 43 | 44 | - (void)setUpClass { 45 | SideMenuViewController *leftSideMenuController = [[SideMenuViewController alloc] init]; 46 | SideMenuViewController *rightSideMenuController = [[SideMenuViewController alloc] init]; 47 | DemoViewController *demoViewController = [[DemoViewController alloc] initWithNibName:@"DemoViewController" 48 | bundle:nil]; 49 | UINavigationController *navigationController = [[UINavigationController alloc] 50 | initWithRootViewController:demoViewController]; 51 | self.container = [MFSideMenuContainerViewController 52 | containerWithCenterViewController:leftSideMenuController 53 | leftMenuViewController:navigationController 54 | rightMenuViewController:rightSideMenuController]; 55 | } 56 | 57 | - (void)tearDownClass { 58 | // Run at end of all tests in the class 59 | } 60 | 61 | - (void)setUp { 62 | // Run before each test method 63 | } 64 | 65 | - (void)tearDown { 66 | // Run after each test method 67 | } 68 | 69 | - (void)testInitialize { 70 | 71 | } 72 | 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.frederickdevelopment.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Tests' target in the 'Tests' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_3_0 8 | #warning "This project uses features only available in iOS SDK 3.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSearchBar/Tests/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Tests 4 | // 5 | // Created by Michael Frederick on 5/3/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "MFAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 274419D317BBAF8C0007ADE7 /* MFSideMenuShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 274419D217BBAF8C0007ADE7 /* MFSideMenuShadow.m */; }; 11 | 27C808DC170AF4A3000584DA /* MFSideMenuContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C808DB170AF4A3000584DA /* MFSideMenuContainerViewController.m */; }; 12 | 27FDAE741706737700F84DFA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27FDAE731706737700F84DFA /* UIKit.framework */; }; 13 | 27FDAE761706737700F84DFA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27FDAE751706737700F84DFA /* Foundation.framework */; }; 14 | 27FDAE781706737700F84DFA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27FDAE771706737700F84DFA /* CoreGraphics.framework */; }; 15 | 27FDAE7E1706737700F84DFA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 27FDAE7C1706737700F84DFA /* InfoPlist.strings */; }; 16 | 27FDAE801706737700F84DFA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FDAE7F1706737700F84DFA /* main.m */; }; 17 | 27FDAE841706737700F84DFA /* MFAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FDAE831706737700F84DFA /* MFAppDelegate.m */; }; 18 | 27FDAE861706737700F84DFA /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 27FDAE851706737700F84DFA /* Default.png */; }; 19 | 27FDAE881706737700F84DFA /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 27FDAE871706737700F84DFA /* Default@2x.png */; }; 20 | 27FDAE8A1706737700F84DFA /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 27FDAE891706737700F84DFA /* Default-568h@2x.png */; }; 21 | 27FDAE8D1706737700F84DFA /* MFMasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FDAE8C1706737700F84DFA /* MFMasterViewController.m */; }; 22 | 27FDAE901706737700F84DFA /* MFDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FDAE8F1706737700F84DFA /* MFDetailViewController.m */; }; 23 | 27FDAE931706737700F84DFA /* MFMasterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27FDAE911706737700F84DFA /* MFMasterViewController.xib */; }; 24 | 27FDAE961706737700F84DFA /* MFDetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27FDAE941706737700F84DFA /* MFDetailViewController.xib */; }; 25 | 27FDAEA51706741900F84DFA /* SideMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FDAEA41706741900F84DFA /* SideMenuViewController.m */; }; 26 | D081F057178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D081F056178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.m */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 274419D117BBAF8C0007ADE7 /* MFSideMenuShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenuShadow.h; sourceTree = ""; }; 31 | 274419D217BBAF8C0007ADE7 /* MFSideMenuShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFSideMenuShadow.m; sourceTree = ""; }; 32 | 2769860D1737D77F00536685 /* MFSideMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenu.h; sourceTree = ""; }; 33 | 27C808DA170AF4A3000584DA /* MFSideMenuContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenuContainerViewController.h; sourceTree = ""; }; 34 | 27C808DB170AF4A3000584DA /* MFSideMenuContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFSideMenuContainerViewController.m; sourceTree = ""; }; 35 | 27FDAE701706737700F84DFA /* MFSideMenuDemoSplitViewController.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MFSideMenuDemoSplitViewController.app; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 27FDAE731706737700F84DFA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 37 | 27FDAE751706737700F84DFA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 38 | 27FDAE771706737700F84DFA /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 39 | 27FDAE7B1706737700F84DFA /* MFSideMenuDemoSplitViewController-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MFSideMenuDemoSplitViewController-Info.plist"; sourceTree = ""; }; 40 | 27FDAE7D1706737700F84DFA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 41 | 27FDAE7F1706737700F84DFA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 42 | 27FDAE811706737700F84DFA /* MFSideMenuDemoSplitViewController-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MFSideMenuDemoSplitViewController-Prefix.pch"; sourceTree = ""; }; 43 | 27FDAE821706737700F84DFA /* MFAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MFAppDelegate.h; sourceTree = ""; }; 44 | 27FDAE831706737700F84DFA /* MFAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MFAppDelegate.m; sourceTree = ""; }; 45 | 27FDAE851706737700F84DFA /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 46 | 27FDAE871706737700F84DFA /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 47 | 27FDAE891706737700F84DFA /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 48 | 27FDAE8B1706737700F84DFA /* MFMasterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MFMasterViewController.h; sourceTree = ""; }; 49 | 27FDAE8C1706737700F84DFA /* MFMasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MFMasterViewController.m; sourceTree = ""; }; 50 | 27FDAE8E1706737700F84DFA /* MFDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MFDetailViewController.h; sourceTree = ""; }; 51 | 27FDAE8F1706737700F84DFA /* MFDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MFDetailViewController.m; sourceTree = ""; }; 52 | 27FDAE921706737700F84DFA /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MFMasterViewController.xib; sourceTree = ""; }; 53 | 27FDAE951706737700F84DFA /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MFDetailViewController.xib; sourceTree = ""; }; 54 | 27FDAEA31706741900F84DFA /* SideMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SideMenuViewController.h; sourceTree = ""; }; 55 | 27FDAEA41706741900F84DFA /* SideMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SideMenuViewController.m; sourceTree = ""; }; 56 | D081F055178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+MFSideMenuAdditions.h"; sourceTree = ""; }; 57 | D081F056178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+MFSideMenuAdditions.m"; sourceTree = ""; }; 58 | /* End PBXFileReference section */ 59 | 60 | /* Begin PBXFrameworksBuildPhase section */ 61 | 27FDAE6D1706737700F84DFA /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 27FDAE741706737700F84DFA /* UIKit.framework in Frameworks */, 66 | 27FDAE761706737700F84DFA /* Foundation.framework in Frameworks */, 67 | 27FDAE781706737700F84DFA /* CoreGraphics.framework in Frameworks */, 68 | ); 69 | runOnlyForDeploymentPostprocessing = 0; 70 | }; 71 | /* End PBXFrameworksBuildPhase section */ 72 | 73 | /* Begin PBXGroup section */ 74 | 27FDAE671706737700F84DFA = { 75 | isa = PBXGroup; 76 | children = ( 77 | 27FDAE9C1706739B00F84DFA /* MFSideMenu */, 78 | 27FDAE791706737700F84DFA /* MFSideMenuDemoSplitViewController */, 79 | 27FDAE721706737700F84DFA /* Frameworks */, 80 | 27FDAE711706737700F84DFA /* Products */, 81 | ); 82 | sourceTree = ""; 83 | }; 84 | 27FDAE711706737700F84DFA /* Products */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 27FDAE701706737700F84DFA /* MFSideMenuDemoSplitViewController.app */, 88 | ); 89 | name = Products; 90 | sourceTree = ""; 91 | }; 92 | 27FDAE721706737700F84DFA /* Frameworks */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | 27FDAE731706737700F84DFA /* UIKit.framework */, 96 | 27FDAE751706737700F84DFA /* Foundation.framework */, 97 | 27FDAE771706737700F84DFA /* CoreGraphics.framework */, 98 | ); 99 | name = Frameworks; 100 | sourceTree = ""; 101 | }; 102 | 27FDAE791706737700F84DFA /* MFSideMenuDemoSplitViewController */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 27FDAE821706737700F84DFA /* MFAppDelegate.h */, 106 | 27FDAE831706737700F84DFA /* MFAppDelegate.m */, 107 | 27FDAE8B1706737700F84DFA /* MFMasterViewController.h */, 108 | 27FDAE8C1706737700F84DFA /* MFMasterViewController.m */, 109 | 27FDAE8E1706737700F84DFA /* MFDetailViewController.h */, 110 | 27FDAE8F1706737700F84DFA /* MFDetailViewController.m */, 111 | 27FDAE911706737700F84DFA /* MFMasterViewController.xib */, 112 | 27FDAE941706737700F84DFA /* MFDetailViewController.xib */, 113 | 27FDAEA31706741900F84DFA /* SideMenuViewController.h */, 114 | 27FDAEA41706741900F84DFA /* SideMenuViewController.m */, 115 | 27FDAE7A1706737700F84DFA /* Supporting Files */, 116 | ); 117 | path = MFSideMenuDemoSplitViewController; 118 | sourceTree = ""; 119 | }; 120 | 27FDAE7A1706737700F84DFA /* Supporting Files */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 27FDAE7B1706737700F84DFA /* MFSideMenuDemoSplitViewController-Info.plist */, 124 | 27FDAE7C1706737700F84DFA /* InfoPlist.strings */, 125 | 27FDAE7F1706737700F84DFA /* main.m */, 126 | 27FDAE811706737700F84DFA /* MFSideMenuDemoSplitViewController-Prefix.pch */, 127 | 27FDAE851706737700F84DFA /* Default.png */, 128 | 27FDAE871706737700F84DFA /* Default@2x.png */, 129 | 27FDAE891706737700F84DFA /* Default-568h@2x.png */, 130 | ); 131 | name = "Supporting Files"; 132 | sourceTree = ""; 133 | }; 134 | 27FDAE9C1706739B00F84DFA /* MFSideMenu */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 2769860D1737D77F00536685 /* MFSideMenu.h */, 138 | 27C808DA170AF4A3000584DA /* MFSideMenuContainerViewController.h */, 139 | 27C808DB170AF4A3000584DA /* MFSideMenuContainerViewController.m */, 140 | D081F055178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.h */, 141 | D081F056178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.m */, 142 | 274419D117BBAF8C0007ADE7 /* MFSideMenuShadow.h */, 143 | 274419D217BBAF8C0007ADE7 /* MFSideMenuShadow.m */, 144 | ); 145 | name = MFSideMenu; 146 | path = ../../MFSideMenu; 147 | sourceTree = ""; 148 | }; 149 | /* End PBXGroup section */ 150 | 151 | /* Begin PBXNativeTarget section */ 152 | 27FDAE6F1706737700F84DFA /* MFSideMenuDemoSplitViewController */ = { 153 | isa = PBXNativeTarget; 154 | buildConfigurationList = 27FDAE991706737700F84DFA /* Build configuration list for PBXNativeTarget "MFSideMenuDemoSplitViewController" */; 155 | buildPhases = ( 156 | 27FDAE6C1706737700F84DFA /* Sources */, 157 | 27FDAE6D1706737700F84DFA /* Frameworks */, 158 | 27FDAE6E1706737700F84DFA /* Resources */, 159 | ); 160 | buildRules = ( 161 | ); 162 | dependencies = ( 163 | ); 164 | name = MFSideMenuDemoSplitViewController; 165 | productName = MFSideMenuDemoSplitViewController; 166 | productReference = 27FDAE701706737700F84DFA /* MFSideMenuDemoSplitViewController.app */; 167 | productType = "com.apple.product-type.application"; 168 | }; 169 | /* End PBXNativeTarget section */ 170 | 171 | /* Begin PBXProject section */ 172 | 27FDAE681706737700F84DFA /* Project object */ = { 173 | isa = PBXProject; 174 | attributes = { 175 | CLASSPREFIX = MF; 176 | LastUpgradeCheck = 0460; 177 | ORGANIZATIONNAME = "Frederick Development"; 178 | }; 179 | buildConfigurationList = 27FDAE6B1706737700F84DFA /* Build configuration list for PBXProject "MFSideMenuDemoSplitViewController" */; 180 | compatibilityVersion = "Xcode 3.2"; 181 | developmentRegion = English; 182 | hasScannedForEncodings = 0; 183 | knownRegions = ( 184 | en, 185 | ); 186 | mainGroup = 27FDAE671706737700F84DFA; 187 | productRefGroup = 27FDAE711706737700F84DFA /* Products */; 188 | projectDirPath = ""; 189 | projectRoot = ""; 190 | targets = ( 191 | 27FDAE6F1706737700F84DFA /* MFSideMenuDemoSplitViewController */, 192 | ); 193 | }; 194 | /* End PBXProject section */ 195 | 196 | /* Begin PBXResourcesBuildPhase section */ 197 | 27FDAE6E1706737700F84DFA /* Resources */ = { 198 | isa = PBXResourcesBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | 27FDAE7E1706737700F84DFA /* InfoPlist.strings in Resources */, 202 | 27FDAE861706737700F84DFA /* Default.png in Resources */, 203 | 27FDAE881706737700F84DFA /* Default@2x.png in Resources */, 204 | 27FDAE8A1706737700F84DFA /* Default-568h@2x.png in Resources */, 205 | 27FDAE931706737700F84DFA /* MFMasterViewController.xib in Resources */, 206 | 27FDAE961706737700F84DFA /* MFDetailViewController.xib in Resources */, 207 | ); 208 | runOnlyForDeploymentPostprocessing = 0; 209 | }; 210 | /* End PBXResourcesBuildPhase section */ 211 | 212 | /* Begin PBXSourcesBuildPhase section */ 213 | 27FDAE6C1706737700F84DFA /* Sources */ = { 214 | isa = PBXSourcesBuildPhase; 215 | buildActionMask = 2147483647; 216 | files = ( 217 | 274419D317BBAF8C0007ADE7 /* MFSideMenuShadow.m in Sources */, 218 | 27FDAE801706737700F84DFA /* main.m in Sources */, 219 | 27FDAE841706737700F84DFA /* MFAppDelegate.m in Sources */, 220 | 27FDAE8D1706737700F84DFA /* MFMasterViewController.m in Sources */, 221 | 27FDAE901706737700F84DFA /* MFDetailViewController.m in Sources */, 222 | 27FDAEA51706741900F84DFA /* SideMenuViewController.m in Sources */, 223 | 27C808DC170AF4A3000584DA /* MFSideMenuContainerViewController.m in Sources */, 224 | D081F057178E6BE4004A89D0 /* UIViewController+MFSideMenuAdditions.m in Sources */, 225 | ); 226 | runOnlyForDeploymentPostprocessing = 0; 227 | }; 228 | /* End PBXSourcesBuildPhase section */ 229 | 230 | /* Begin PBXVariantGroup section */ 231 | 27FDAE7C1706737700F84DFA /* InfoPlist.strings */ = { 232 | isa = PBXVariantGroup; 233 | children = ( 234 | 27FDAE7D1706737700F84DFA /* en */, 235 | ); 236 | name = InfoPlist.strings; 237 | sourceTree = ""; 238 | }; 239 | 27FDAE911706737700F84DFA /* MFMasterViewController.xib */ = { 240 | isa = PBXVariantGroup; 241 | children = ( 242 | 27FDAE921706737700F84DFA /* en */, 243 | ); 244 | name = MFMasterViewController.xib; 245 | sourceTree = ""; 246 | }; 247 | 27FDAE941706737700F84DFA /* MFDetailViewController.xib */ = { 248 | isa = PBXVariantGroup; 249 | children = ( 250 | 27FDAE951706737700F84DFA /* en */, 251 | ); 252 | name = MFDetailViewController.xib; 253 | sourceTree = ""; 254 | }; 255 | /* End PBXVariantGroup section */ 256 | 257 | /* Begin XCBuildConfiguration section */ 258 | 27FDAE971706737700F84DFA /* Debug */ = { 259 | isa = XCBuildConfiguration; 260 | buildSettings = { 261 | ALWAYS_SEARCH_USER_PATHS = NO; 262 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 263 | CLANG_CXX_LIBRARY = "libc++"; 264 | CLANG_ENABLE_OBJC_ARC = YES; 265 | CLANG_WARN_CONSTANT_CONVERSION = YES; 266 | CLANG_WARN_EMPTY_BODY = YES; 267 | CLANG_WARN_ENUM_CONVERSION = YES; 268 | CLANG_WARN_INT_CONVERSION = YES; 269 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 270 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 271 | COPY_PHASE_STRIP = NO; 272 | GCC_C_LANGUAGE_STANDARD = gnu99; 273 | GCC_DYNAMIC_NO_PIC = NO; 274 | GCC_OPTIMIZATION_LEVEL = 0; 275 | GCC_PREPROCESSOR_DEFINITIONS = ( 276 | "DEBUG=1", 277 | "$(inherited)", 278 | ); 279 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 280 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 281 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 282 | GCC_WARN_UNUSED_VARIABLE = YES; 283 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 284 | ONLY_ACTIVE_ARCH = YES; 285 | SDKROOT = iphoneos; 286 | TARGETED_DEVICE_FAMILY = 2; 287 | }; 288 | name = Debug; 289 | }; 290 | 27FDAE981706737700F84DFA /* Release */ = { 291 | isa = XCBuildConfiguration; 292 | buildSettings = { 293 | ALWAYS_SEARCH_USER_PATHS = NO; 294 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 295 | CLANG_CXX_LIBRARY = "libc++"; 296 | CLANG_ENABLE_OBJC_ARC = YES; 297 | CLANG_WARN_CONSTANT_CONVERSION = YES; 298 | CLANG_WARN_EMPTY_BODY = YES; 299 | CLANG_WARN_ENUM_CONVERSION = YES; 300 | CLANG_WARN_INT_CONVERSION = YES; 301 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 302 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 303 | COPY_PHASE_STRIP = YES; 304 | GCC_C_LANGUAGE_STANDARD = gnu99; 305 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 306 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 307 | GCC_WARN_UNUSED_VARIABLE = YES; 308 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 309 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 310 | SDKROOT = iphoneos; 311 | TARGETED_DEVICE_FAMILY = 2; 312 | VALIDATE_PRODUCT = YES; 313 | }; 314 | name = Release; 315 | }; 316 | 27FDAE9A1706737700F84DFA /* Debug */ = { 317 | isa = XCBuildConfiguration; 318 | buildSettings = { 319 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 320 | GCC_PREFIX_HEADER = "MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController-Prefix.pch"; 321 | INFOPLIST_FILE = "MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController-Info.plist"; 322 | IPHONEOS_DEPLOYMENT_TARGET = 5.1; 323 | PRODUCT_NAME = "$(TARGET_NAME)"; 324 | WRAPPER_EXTENSION = app; 325 | }; 326 | name = Debug; 327 | }; 328 | 27FDAE9B1706737700F84DFA /* Release */ = { 329 | isa = XCBuildConfiguration; 330 | buildSettings = { 331 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 332 | GCC_PREFIX_HEADER = "MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController-Prefix.pch"; 333 | INFOPLIST_FILE = "MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController-Info.plist"; 334 | IPHONEOS_DEPLOYMENT_TARGET = 5.1; 335 | PRODUCT_NAME = "$(TARGET_NAME)"; 336 | WRAPPER_EXTENSION = app; 337 | }; 338 | name = Release; 339 | }; 340 | /* End XCBuildConfiguration section */ 341 | 342 | /* Begin XCConfigurationList section */ 343 | 27FDAE6B1706737700F84DFA /* Build configuration list for PBXProject "MFSideMenuDemoSplitViewController" */ = { 344 | isa = XCConfigurationList; 345 | buildConfigurations = ( 346 | 27FDAE971706737700F84DFA /* Debug */, 347 | 27FDAE981706737700F84DFA /* Release */, 348 | ); 349 | defaultConfigurationIsVisible = 0; 350 | defaultConfigurationName = Release; 351 | }; 352 | 27FDAE991706737700F84DFA /* Build configuration list for PBXNativeTarget "MFSideMenuDemoSplitViewController" */ = { 353 | isa = XCConfigurationList; 354 | buildConfigurations = ( 355 | 27FDAE9A1706737700F84DFA /* Debug */, 356 | 27FDAE9B1706737700F84DFA /* Release */, 357 | ); 358 | defaultConfigurationIsVisible = 0; 359 | defaultConfigurationName = Release; 360 | }; 361 | /* End XCConfigurationList section */ 362 | }; 363 | rootObject = 27FDAE681706737700F84DFA /* Project object */; 364 | } 365 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/Default-568h@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/Default.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/Default@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.h 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MFAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @property (strong, nonatomic) UISplitViewController *splitViewController; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.m 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import "MFAppDelegate.h" 10 | #import "MFMasterViewController.h" 11 | #import "MFDetailViewController.h" 12 | #import "MFSideMenuContainerViewController.h" 13 | #import "SideMenuViewController.h" 14 | 15 | @implementation MFAppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 20 | // Override point for customization after application launch. 21 | 22 | MFMasterViewController *masterViewController = [[MFMasterViewController alloc] initWithNibName:@"MFMasterViewController" bundle:nil]; 23 | UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 24 | 25 | MFDetailViewController *detailViewController = [[MFDetailViewController alloc] initWithNibName:@"MFDetailViewController" bundle:nil]; 26 | UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; 27 | 28 | masterViewController.detailViewController = detailViewController; 29 | 30 | self.splitViewController = [[UISplitViewController alloc] init]; 31 | self.splitViewController.delegate = detailViewController; 32 | CGRect frame = self.splitViewController.view.frame; 33 | frame.origin = CGPointZero; 34 | self.splitViewController.view.frame = frame; 35 | self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController]; 36 | 37 | SideMenuViewController *leftSideMenuController = [[SideMenuViewController alloc] init]; 38 | SideMenuViewController *rightSideMenuController = [[SideMenuViewController alloc] init]; 39 | MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController 40 | containerWithCenterViewController:self.splitViewController 41 | leftMenuViewController:leftSideMenuController 42 | rightMenuViewController:rightSideMenuController]; 43 | self.window.rootViewController = container; 44 | [self.window makeKeyAndVisible]; 45 | return YES; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFDetailViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFDetailViewController.h 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MFDetailViewController : UIViewController 12 | 13 | @property (strong, nonatomic) id detailItem; 14 | 15 | @property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel; 16 | @end 17 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFDetailViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFDetailViewController.m 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import "MFDetailViewController.h" 10 | 11 | @interface MFDetailViewController () 12 | @property (strong, nonatomic) UIPopoverController *masterPopoverController; 13 | - (void)configureView; 14 | @end 15 | 16 | @implementation MFDetailViewController 17 | 18 | #pragma mark - Managing the detail item 19 | 20 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 21 | return YES; 22 | } 23 | 24 | - (void)setDetailItem:(id)newDetailItem 25 | { 26 | if (_detailItem != newDetailItem) { 27 | _detailItem = newDetailItem; 28 | 29 | // Update the view. 30 | [self configureView]; 31 | } 32 | 33 | if (self.masterPopoverController != nil) { 34 | [self.masterPopoverController dismissPopoverAnimated:YES]; 35 | } 36 | } 37 | 38 | - (void)configureView 39 | { 40 | // Update the user interface for the detail item. 41 | 42 | if (self.detailItem) { 43 | self.detailDescriptionLabel.text = [self.detailItem description]; 44 | } 45 | } 46 | 47 | - (void)viewDidLoad 48 | { 49 | [super viewDidLoad]; 50 | // Do any additional setup after loading the view, typically from a nib. 51 | [self configureView]; 52 | } 53 | 54 | - (void)didReceiveMemoryWarning 55 | { 56 | [super didReceiveMemoryWarning]; 57 | // Dispose of any resources that can be recreated. 58 | } 59 | 60 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 61 | { 62 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 63 | if (self) { 64 | self.title = NSLocalizedString(@"Detail", @"Detail"); 65 | } 66 | return self; 67 | } 68 | 69 | #pragma mark - Split view 70 | 71 | - (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController 72 | { 73 | barButtonItem.title = NSLocalizedString(@"Master", @"Master"); 74 | [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; 75 | self.masterPopoverController = popoverController; 76 | } 77 | 78 | - (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 79 | { 80 | // Called when the view is shown again in the split view, invalidating the button and popover controller. 81 | [self.navigationItem setLeftBarButtonItem:nil animated:YES]; 82 | self.masterPopoverController = nil; 83 | } 84 | 85 | @end 86 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFMasterViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFMasterViewController.h 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class MFDetailViewController; 12 | 13 | @interface MFMasterViewController : UITableViewController 14 | 15 | @property (strong, nonatomic) MFDetailViewController *detailViewController; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFMasterViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFMasterViewController.m 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import "MFMasterViewController.h" 10 | 11 | #import "MFDetailViewController.h" 12 | 13 | @interface MFMasterViewController () { 14 | NSMutableArray *_objects; 15 | } 16 | @end 17 | 18 | @implementation MFMasterViewController 19 | 20 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 21 | return YES; 22 | } 23 | 24 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 25 | { 26 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 27 | if (self) { 28 | self.title = NSLocalizedString(@"Master", @"Master"); 29 | self.clearsSelectionOnViewWillAppear = NO; 30 | self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0); 31 | } 32 | return self; 33 | } 34 | 35 | - (void)viewDidLoad 36 | { 37 | [super viewDidLoad]; 38 | // Do any additional setup after loading the view, typically from a nib. 39 | self.navigationItem.leftBarButtonItem = self.editButtonItem; 40 | 41 | UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]; 42 | self.navigationItem.rightBarButtonItem = addButton; 43 | } 44 | 45 | - (void)didReceiveMemoryWarning 46 | { 47 | [super didReceiveMemoryWarning]; 48 | // Dispose of any resources that can be recreated. 49 | } 50 | 51 | - (void)insertNewObject:(id)sender 52 | { 53 | if (!_objects) { 54 | _objects = [[NSMutableArray alloc] init]; 55 | } 56 | [_objects insertObject:[NSDate date] atIndex:0]; 57 | NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 58 | [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 59 | } 60 | 61 | #pragma mark - Table View 62 | 63 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 64 | { 65 | return 1; 66 | } 67 | 68 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 69 | { 70 | return _objects.count; 71 | } 72 | 73 | // Customize the appearance of table view cells. 74 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 75 | { 76 | static NSString *CellIdentifier = @"Cell"; 77 | 78 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 79 | if (cell == nil) { 80 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 81 | } 82 | 83 | 84 | NSDate *object = _objects[indexPath.row]; 85 | cell.textLabel.text = [object description]; 86 | return cell; 87 | } 88 | 89 | - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 90 | { 91 | // Return NO if you do not want the specified item to be editable. 92 | return YES; 93 | } 94 | 95 | - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 96 | { 97 | if (editingStyle == UITableViewCellEditingStyleDelete) { 98 | [_objects removeObjectAtIndex:indexPath.row]; 99 | [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 100 | } else if (editingStyle == UITableViewCellEditingStyleInsert) { 101 | // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 102 | } 103 | } 104 | 105 | /* 106 | // Override to support rearranging the table view. 107 | - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 108 | { 109 | } 110 | */ 111 | 112 | /* 113 | // Override to support conditional rearranging of the table view. 114 | - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 115 | { 116 | // Return NO if you do not want the item to be re-orderable. 117 | return YES; 118 | } 119 | */ 120 | 121 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 122 | { 123 | NSDate *object = _objects[indexPath.row]; 124 | self.detailViewController.detailItem = object; 125 | } 126 | 127 | @end 128 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.frederickdevelopment.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIStatusBarTintParameters 32 | 33 | UINavigationBar 34 | 35 | Style 36 | UIBarStyleDefault 37 | Translucent 38 | 39 | 40 | 41 | UISupportedInterfaceOrientations 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | UISupportedInterfaceOrientations~ipad 48 | 49 | UIInterfaceOrientationPortrait 50 | UIInterfaceOrientationPortraitUpsideDown 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MFSideMenuDemoSplitViewController' target in the 'MFSideMenuDemoSplitViewController' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_4_0 8 | #warning "This project uses features only available in iOS SDK 4.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/SideMenuViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import 8 | 9 | @interface SideMenuViewController : UITableViewController 10 | @end -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/SideMenuViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import "SideMenuViewController.h" 8 | #import "MFSideMenu.h" 9 | 10 | @implementation SideMenuViewController 11 | 12 | #pragma mark - 13 | #pragma mark - UITableViewDataSource 14 | 15 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 16 | return [NSString stringWithFormat:@"Section %d", section]; 17 | } 18 | 19 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 20 | return 2; 21 | } 22 | 23 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 24 | return 10; 25 | } 26 | 27 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 28 | static NSString *CellIdentifier = @"Cell"; 29 | 30 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 31 | if (cell == nil) { 32 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 33 | } 34 | 35 | cell.textLabel.text = [NSString stringWithFormat:@"Item %d", indexPath.row]; 36 | 37 | return cell; 38 | } 39 | 40 | #pragma mark - 41 | #pragma mark - UITableViewDelegate 42 | 43 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/en.lproj/MFDetailViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1552 5 | 12D78 6 | 3084 7 | 1187.37 8 | 626.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 2083 12 | 13 | 14 | IBProxyObject 15 | IBUILabel 16 | IBUIView 17 | 18 | 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | PluginDependencyRecalculationVersion 23 | 24 | 25 | 26 | 27 | IBFilesOwner 28 | IBIPadFramework 29 | 30 | 31 | IBFirstResponder 32 | IBIPadFramework 33 | 34 | 35 | 36 | 274 37 | 38 | 39 | 40 | 298 41 | {{20, 493}, {728, 18}} 42 | 43 | 44 | 45 | 3 46 | MQA 47 | 48 | YES 49 | NO 50 | IBIPadFramework 51 | Detail view content goes here 52 | 53 | 1 54 | MCAwIDAAA 55 | darkTextColor 56 | 57 | 58 | 1 59 | 10 60 | 1 61 | 62 | 1 63 | 4 64 | 65 | 66 | Helvetica 67 | 14 68 | 16 69 | 70 | 71 | 72 | {{0, 20}, {768, 1004}} 73 | 74 | 75 | 76 | NO 77 | 78 | 2 79 | 80 | IBIPadFramework 81 | 82 | 83 | 84 | 85 | 86 | 87 | view 88 | 89 | 90 | 91 | 12 92 | 93 | 94 | 95 | 96 | 97 | 0 98 | 99 | 100 | 101 | 102 | 103 | -1 104 | 105 | 106 | File's Owner 107 | 108 | 109 | -2 110 | 111 | 112 | 113 | 114 | 8 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 81 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | MFDetailViewController 131 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 132 | UIResponder 133 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 134 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 135 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 136 | 137 | 138 | 139 | 140 | 141 | 98 142 | 143 | 144 | 145 | 146 | MFDetailViewController 147 | UIViewController 148 | 149 | detailDescriptionLabel 150 | UILabel 151 | 152 | 153 | detailDescriptionLabel 154 | 155 | detailDescriptionLabel 156 | UILabel 157 | 158 | 159 | 160 | IBProjectSource 161 | ./Classes/MFDetailViewController.h 162 | 163 | 164 | 165 | 166 | 0 167 | IBIPadFramework 168 | YES 169 | 3 170 | 2083 171 | 172 | 173 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/en.lproj/MFMasterViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1552 5 | 12D78 6 | 3084 7 | 1187.37 8 | 626.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 2083 12 | 13 | 14 | IBProxyObject 15 | IBUITableView 16 | 17 | 18 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 19 | 20 | 21 | PluginDependencyRecalculationVersion 22 | 23 | 24 | 25 | 26 | IBFilesOwner 27 | IBIPadFramework 28 | 29 | 30 | IBFirstResponder 31 | IBIPadFramework 32 | 33 | 34 | 35 | 274 36 | {{0, 20}, {320, 832}} 37 | 38 | 39 | 40 | 3 41 | MQA 42 | 43 | YES 44 | 45 | 2 46 | 47 | 48 | IBUISplitViewMasterSimulatedSizeMetrics 49 | 50 | YES 51 | 52 | 53 | 54 | 55 | 56 | {320, 852} 57 | {320, 768} 58 | 59 | 60 | IBIPadFramework 61 | Master 62 | IBUISplitViewController 63 | 64 | IBUISplitViewControllerContentSizeLocation 65 | IBUISplitViewControllerContentSizeLocationMaster 66 | 67 | 68 | IBIPadFramework 69 | YES 70 | 1 71 | 0 72 | YES 73 | 44 74 | 22 75 | 22 76 | 77 | 78 | 79 | 80 | 81 | 82 | view 83 | 84 | 85 | 86 | 3 87 | 88 | 89 | 90 | dataSource 91 | 92 | 93 | 94 | 4 95 | 96 | 97 | 98 | delegate 99 | 100 | 101 | 102 | 5 103 | 104 | 105 | 106 | 107 | 108 | 0 109 | 110 | 111 | 112 | 113 | 114 | -1 115 | 116 | 117 | File's Owner 118 | 119 | 120 | -2 121 | 122 | 123 | 124 | 125 | 2 126 | 127 | 128 | 129 | 130 | 131 | 132 | MFMasterViewController 133 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 134 | UIResponder 135 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 136 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 137 | 138 | 139 | 140 | 141 | 142 | 5 143 | 144 | 145 | 0 146 | IBIPadFramework 147 | YES 148 | 3 149 | 2083 150 | 151 | 152 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoSplitViewController/MFSideMenuDemoSplitViewController/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 3/29/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "MFAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([MFAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 273D106316F3E7FE00C187E0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273D106216F3E7FE00C187E0 /* UIKit.framework */; }; 11 | 273D106516F3E7FE00C187E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273D106416F3E7FE00C187E0 /* Foundation.framework */; }; 12 | 273D106716F3E7FE00C187E0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273D106616F3E7FE00C187E0 /* CoreGraphics.framework */; }; 13 | 273D106D16F3E7FE00C187E0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 273D106B16F3E7FE00C187E0 /* InfoPlist.strings */; }; 14 | 273D106F16F3E7FE00C187E0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 273D106E16F3E7FE00C187E0 /* main.m */; }; 15 | 273D107316F3E7FE00C187E0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 273D107216F3E7FE00C187E0 /* AppDelegate.m */; }; 16 | 273D107C16F3E7FE00C187E0 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 273D107A16F3E7FE00C187E0 /* MainStoryboard.storyboard */; }; 17 | 274419D917BBAFA90007ADE7 /* MFSideMenuShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 274419D817BBAFA90007ADE7 /* MFSideMenuShadow.m */; }; 18 | 2769860617355CE900536685 /* MFSideMenuContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2769860517355CE900536685 /* MFSideMenuContainerViewController.m */; }; 19 | 27698611173911BE00536685 /* SideMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27698610173911BE00536685 /* SideMenuViewController.m */; }; 20 | 2769861A1739176A00536685 /* back-arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986131739176A00536685 /* back-arrow.png */; }; 21 | 2769861B1739176A00536685 /* back-arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986141739176A00536685 /* back-arrow@2x.png */; }; 22 | 2769861C1739176A00536685 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986151739176A00536685 /* Default-568h@2x.png */; }; 23 | 2769861D1739176A00536685 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986161739176A00536685 /* Default.png */; }; 24 | 2769861E1739176A00536685 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986171739176A00536685 /* Default@2x.png */; }; 25 | 2769861F1739176A00536685 /* menu-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986181739176A00536685 /* menu-icon.png */; }; 26 | 276986201739176A00536685 /* menu-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 276986191739176A00536685 /* menu-icon@2x.png */; }; 27 | 279CE767171433C00056366A /* DemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 279CE766171433C00056366A /* DemoViewController.m */; }; 28 | D081F054178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D081F053178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.m */; }; 29 | /* End PBXBuildFile section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 273D105F16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MFSideMenuDemoStoryboard.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 273D106216F3E7FE00C187E0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 34 | 273D106416F3E7FE00C187E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 35 | 273D106616F3E7FE00C187E0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 36 | 273D106A16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MFSideMenuDemoStoryboard-Info.plist"; sourceTree = ""; }; 37 | 273D106C16F3E7FE00C187E0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 38 | 273D106E16F3E7FE00C187E0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 39 | 273D107016F3E7FE00C187E0 /* MFSideMenuDemoStoryboard-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MFSideMenuDemoStoryboard-Prefix.pch"; sourceTree = ""; }; 40 | 273D107116F3E7FE00C187E0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 41 | 273D107216F3E7FE00C187E0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 42 | 273D107B16F3E7FE00C187E0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = ""; }; 43 | 274419D717BBAFA90007ADE7 /* MFSideMenuShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenuShadow.h; sourceTree = ""; }; 44 | 274419D817BBAFA90007ADE7 /* MFSideMenuShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFSideMenuShadow.m; sourceTree = ""; }; 45 | 2769860417355CE900536685 /* MFSideMenuContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenuContainerViewController.h; sourceTree = ""; }; 46 | 2769860517355CE900536685 /* MFSideMenuContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFSideMenuContainerViewController.m; sourceTree = ""; }; 47 | 2769860E1737D78600536685 /* MFSideMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenu.h; sourceTree = ""; }; 48 | 2769860F173911BE00536685 /* SideMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SideMenuViewController.h; sourceTree = ""; }; 49 | 27698610173911BE00536685 /* SideMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SideMenuViewController.m; sourceTree = ""; }; 50 | 276986131739176A00536685 /* back-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-arrow.png"; sourceTree = ""; }; 51 | 276986141739176A00536685 /* back-arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-arrow@2x.png"; sourceTree = ""; }; 52 | 276986151739176A00536685 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 53 | 276986161739176A00536685 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 54 | 276986171739176A00536685 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 55 | 276986181739176A00536685 /* menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon.png"; sourceTree = ""; }; 56 | 276986191739176A00536685 /* menu-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon@2x.png"; sourceTree = ""; }; 57 | 279CE765171433C00056366A /* DemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoViewController.h; sourceTree = ""; }; 58 | 279CE766171433C00056366A /* DemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoViewController.m; sourceTree = ""; }; 59 | D081F052178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+MFSideMenuAdditions.h"; sourceTree = ""; }; 60 | D081F053178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+MFSideMenuAdditions.m"; sourceTree = ""; }; 61 | /* End PBXFileReference section */ 62 | 63 | /* Begin PBXFrameworksBuildPhase section */ 64 | 273D105C16F3E7FE00C187E0 /* Frameworks */ = { 65 | isa = PBXFrameworksBuildPhase; 66 | buildActionMask = 2147483647; 67 | files = ( 68 | 273D106316F3E7FE00C187E0 /* UIKit.framework in Frameworks */, 69 | 273D106516F3E7FE00C187E0 /* Foundation.framework in Frameworks */, 70 | 273D106716F3E7FE00C187E0 /* CoreGraphics.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | /* End PBXFrameworksBuildPhase section */ 75 | 76 | /* Begin PBXGroup section */ 77 | 273D105616F3E7FE00C187E0 = { 78 | isa = PBXGroup; 79 | children = ( 80 | 273D112216F6331D00C187E0 /* MFSideMenu */, 81 | 273D106816F3E7FE00C187E0 /* MFSideMenuDemoStoryboard */, 82 | 273D106116F3E7FE00C187E0 /* Frameworks */, 83 | 273D106016F3E7FE00C187E0 /* Products */, 84 | ); 85 | sourceTree = ""; 86 | }; 87 | 273D106016F3E7FE00C187E0 /* Products */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 273D105F16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard.app */, 91 | ); 92 | name = Products; 93 | sourceTree = ""; 94 | }; 95 | 273D106116F3E7FE00C187E0 /* Frameworks */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 273D106216F3E7FE00C187E0 /* UIKit.framework */, 99 | 273D106416F3E7FE00C187E0 /* Foundation.framework */, 100 | 273D106616F3E7FE00C187E0 /* CoreGraphics.framework */, 101 | ); 102 | name = Frameworks; 103 | sourceTree = ""; 104 | }; 105 | 273D106816F3E7FE00C187E0 /* MFSideMenuDemoStoryboard */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 276986121739176A00536685 /* Images */, 109 | 273D107116F3E7FE00C187E0 /* AppDelegate.h */, 110 | 273D107216F3E7FE00C187E0 /* AppDelegate.m */, 111 | 273D107A16F3E7FE00C187E0 /* MainStoryboard.storyboard */, 112 | 273D106916F3E7FE00C187E0 /* Supporting Files */, 113 | 279CE765171433C00056366A /* DemoViewController.h */, 114 | 279CE766171433C00056366A /* DemoViewController.m */, 115 | 2769860F173911BE00536685 /* SideMenuViewController.h */, 116 | 27698610173911BE00536685 /* SideMenuViewController.m */, 117 | ); 118 | path = MFSideMenuDemoStoryboard; 119 | sourceTree = ""; 120 | }; 121 | 273D106916F3E7FE00C187E0 /* Supporting Files */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 273D106A16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard-Info.plist */, 125 | 273D106B16F3E7FE00C187E0 /* InfoPlist.strings */, 126 | 273D106E16F3E7FE00C187E0 /* main.m */, 127 | 273D107016F3E7FE00C187E0 /* MFSideMenuDemoStoryboard-Prefix.pch */, 128 | ); 129 | name = "Supporting Files"; 130 | sourceTree = ""; 131 | }; 132 | 273D112216F6331D00C187E0 /* MFSideMenu */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 2769860E1737D78600536685 /* MFSideMenu.h */, 136 | 2769860417355CE900536685 /* MFSideMenuContainerViewController.h */, 137 | 2769860517355CE900536685 /* MFSideMenuContainerViewController.m */, 138 | D081F052178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.h */, 139 | D081F053178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.m */, 140 | 274419D717BBAFA90007ADE7 /* MFSideMenuShadow.h */, 141 | 274419D817BBAFA90007ADE7 /* MFSideMenuShadow.m */, 142 | ); 143 | name = MFSideMenu; 144 | path = ../../MFSideMenu; 145 | sourceTree = ""; 146 | }; 147 | 276986121739176A00536685 /* Images */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 276986131739176A00536685 /* back-arrow.png */, 151 | 276986141739176A00536685 /* back-arrow@2x.png */, 152 | 276986151739176A00536685 /* Default-568h@2x.png */, 153 | 276986161739176A00536685 /* Default.png */, 154 | 276986171739176A00536685 /* Default@2x.png */, 155 | 276986181739176A00536685 /* menu-icon.png */, 156 | 276986191739176A00536685 /* menu-icon@2x.png */, 157 | ); 158 | path = Images; 159 | sourceTree = ""; 160 | }; 161 | /* End PBXGroup section */ 162 | 163 | /* Begin PBXNativeTarget section */ 164 | 273D105E16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard */ = { 165 | isa = PBXNativeTarget; 166 | buildConfigurationList = 273D108216F3E7FE00C187E0 /* Build configuration list for PBXNativeTarget "MFSideMenuDemoStoryboard" */; 167 | buildPhases = ( 168 | 273D105B16F3E7FE00C187E0 /* Sources */, 169 | 273D105C16F3E7FE00C187E0 /* Frameworks */, 170 | 273D105D16F3E7FE00C187E0 /* Resources */, 171 | ); 172 | buildRules = ( 173 | ); 174 | dependencies = ( 175 | ); 176 | name = MFSideMenuDemoStoryboard; 177 | productName = MFSideMenuDemoStoryboard; 178 | productReference = 273D105F16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard.app */; 179 | productType = "com.apple.product-type.application"; 180 | }; 181 | /* End PBXNativeTarget section */ 182 | 183 | /* Begin PBXProject section */ 184 | 273D105716F3E7FE00C187E0 /* Project object */ = { 185 | isa = PBXProject; 186 | attributes = { 187 | LastUpgradeCheck = 0460; 188 | ORGANIZATIONNAME = "Michael Frederick"; 189 | }; 190 | buildConfigurationList = 273D105A16F3E7FE00C187E0 /* Build configuration list for PBXProject "MFSideMenuDemoStoryboard" */; 191 | compatibilityVersion = "Xcode 3.2"; 192 | developmentRegion = English; 193 | hasScannedForEncodings = 0; 194 | knownRegions = ( 195 | en, 196 | ); 197 | mainGroup = 273D105616F3E7FE00C187E0; 198 | productRefGroup = 273D106016F3E7FE00C187E0 /* Products */; 199 | projectDirPath = ""; 200 | projectRoot = ""; 201 | targets = ( 202 | 273D105E16F3E7FE00C187E0 /* MFSideMenuDemoStoryboard */, 203 | ); 204 | }; 205 | /* End PBXProject section */ 206 | 207 | /* Begin PBXResourcesBuildPhase section */ 208 | 273D105D16F3E7FE00C187E0 /* Resources */ = { 209 | isa = PBXResourcesBuildPhase; 210 | buildActionMask = 2147483647; 211 | files = ( 212 | 273D106D16F3E7FE00C187E0 /* InfoPlist.strings in Resources */, 213 | 273D107C16F3E7FE00C187E0 /* MainStoryboard.storyboard in Resources */, 214 | 2769861A1739176A00536685 /* back-arrow.png in Resources */, 215 | 2769861B1739176A00536685 /* back-arrow@2x.png in Resources */, 216 | 2769861C1739176A00536685 /* Default-568h@2x.png in Resources */, 217 | 2769861D1739176A00536685 /* Default.png in Resources */, 218 | 2769861E1739176A00536685 /* Default@2x.png in Resources */, 219 | 2769861F1739176A00536685 /* menu-icon.png in Resources */, 220 | 276986201739176A00536685 /* menu-icon@2x.png in Resources */, 221 | ); 222 | runOnlyForDeploymentPostprocessing = 0; 223 | }; 224 | /* End PBXResourcesBuildPhase section */ 225 | 226 | /* Begin PBXSourcesBuildPhase section */ 227 | 273D105B16F3E7FE00C187E0 /* Sources */ = { 228 | isa = PBXSourcesBuildPhase; 229 | buildActionMask = 2147483647; 230 | files = ( 231 | 273D106F16F3E7FE00C187E0 /* main.m in Sources */, 232 | 273D107316F3E7FE00C187E0 /* AppDelegate.m in Sources */, 233 | 274419D917BBAFA90007ADE7 /* MFSideMenuShadow.m in Sources */, 234 | 279CE767171433C00056366A /* DemoViewController.m in Sources */, 235 | 2769860617355CE900536685 /* MFSideMenuContainerViewController.m in Sources */, 236 | 27698611173911BE00536685 /* SideMenuViewController.m in Sources */, 237 | D081F054178E6B7E004A89D0 /* UIViewController+MFSideMenuAdditions.m in Sources */, 238 | ); 239 | runOnlyForDeploymentPostprocessing = 0; 240 | }; 241 | /* End PBXSourcesBuildPhase section */ 242 | 243 | /* Begin PBXVariantGroup section */ 244 | 273D106B16F3E7FE00C187E0 /* InfoPlist.strings */ = { 245 | isa = PBXVariantGroup; 246 | children = ( 247 | 273D106C16F3E7FE00C187E0 /* en */, 248 | ); 249 | name = InfoPlist.strings; 250 | sourceTree = ""; 251 | }; 252 | 273D107A16F3E7FE00C187E0 /* MainStoryboard.storyboard */ = { 253 | isa = PBXVariantGroup; 254 | children = ( 255 | 273D107B16F3E7FE00C187E0 /* en */, 256 | ); 257 | name = MainStoryboard.storyboard; 258 | sourceTree = ""; 259 | }; 260 | /* End PBXVariantGroup section */ 261 | 262 | /* Begin XCBuildConfiguration section */ 263 | 273D108016F3E7FE00C187E0 /* Debug */ = { 264 | isa = XCBuildConfiguration; 265 | buildSettings = { 266 | ALWAYS_SEARCH_USER_PATHS = NO; 267 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 268 | CLANG_CXX_LIBRARY = "libc++"; 269 | CLANG_ENABLE_OBJC_ARC = YES; 270 | CLANG_WARN_CONSTANT_CONVERSION = YES; 271 | CLANG_WARN_EMPTY_BODY = YES; 272 | CLANG_WARN_ENUM_CONVERSION = YES; 273 | CLANG_WARN_INT_CONVERSION = YES; 274 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 275 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 276 | COPY_PHASE_STRIP = NO; 277 | GCC_C_LANGUAGE_STANDARD = gnu99; 278 | GCC_DYNAMIC_NO_PIC = NO; 279 | GCC_OPTIMIZATION_LEVEL = 0; 280 | GCC_PREPROCESSOR_DEFINITIONS = ( 281 | "DEBUG=1", 282 | "$(inherited)", 283 | ); 284 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 285 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 286 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 287 | GCC_WARN_UNUSED_VARIABLE = YES; 288 | HEADER_SEARCH_PATHS = "${SRCROOT}/../MFSideMenu/**"; 289 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 290 | ONLY_ACTIVE_ARCH = YES; 291 | SDKROOT = iphoneos; 292 | }; 293 | name = Debug; 294 | }; 295 | 273D108116F3E7FE00C187E0 /* Release */ = { 296 | isa = XCBuildConfiguration; 297 | buildSettings = { 298 | ALWAYS_SEARCH_USER_PATHS = NO; 299 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 300 | CLANG_CXX_LIBRARY = "libc++"; 301 | CLANG_ENABLE_OBJC_ARC = YES; 302 | CLANG_WARN_CONSTANT_CONVERSION = YES; 303 | CLANG_WARN_EMPTY_BODY = YES; 304 | CLANG_WARN_ENUM_CONVERSION = YES; 305 | CLANG_WARN_INT_CONVERSION = YES; 306 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 307 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 308 | COPY_PHASE_STRIP = YES; 309 | GCC_C_LANGUAGE_STANDARD = gnu99; 310 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 311 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 312 | GCC_WARN_UNUSED_VARIABLE = YES; 313 | HEADER_SEARCH_PATHS = "${SRCROOT}/../MFSideMenu/**"; 314 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 315 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 316 | SDKROOT = iphoneos; 317 | VALIDATE_PRODUCT = YES; 318 | }; 319 | name = Release; 320 | }; 321 | 273D108316F3E7FE00C187E0 /* Debug */ = { 322 | isa = XCBuildConfiguration; 323 | buildSettings = { 324 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 325 | GCC_PREFIX_HEADER = "MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard-Prefix.pch"; 326 | HEADER_SEARCH_PATHS = ""; 327 | INFOPLIST_FILE = "MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard-Info.plist"; 328 | PRODUCT_NAME = "$(TARGET_NAME)"; 329 | USER_HEADER_SEARCH_PATHS = ""; 330 | WRAPPER_EXTENSION = app; 331 | }; 332 | name = Debug; 333 | }; 334 | 273D108416F3E7FE00C187E0 /* Release */ = { 335 | isa = XCBuildConfiguration; 336 | buildSettings = { 337 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 338 | GCC_PREFIX_HEADER = "MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard-Prefix.pch"; 339 | HEADER_SEARCH_PATHS = ""; 340 | INFOPLIST_FILE = "MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard-Info.plist"; 341 | PRODUCT_NAME = "$(TARGET_NAME)"; 342 | USER_HEADER_SEARCH_PATHS = ""; 343 | WRAPPER_EXTENSION = app; 344 | }; 345 | name = Release; 346 | }; 347 | /* End XCBuildConfiguration section */ 348 | 349 | /* Begin XCConfigurationList section */ 350 | 273D105A16F3E7FE00C187E0 /* Build configuration list for PBXProject "MFSideMenuDemoStoryboard" */ = { 351 | isa = XCConfigurationList; 352 | buildConfigurations = ( 353 | 273D108016F3E7FE00C187E0 /* Debug */, 354 | 273D108116F3E7FE00C187E0 /* Release */, 355 | ); 356 | defaultConfigurationIsVisible = 0; 357 | defaultConfigurationName = Release; 358 | }; 359 | 273D108216F3E7FE00C187E0 /* Build configuration list for PBXNativeTarget "MFSideMenuDemoStoryboard" */ = { 360 | isa = XCConfigurationList; 361 | buildConfigurations = ( 362 | 273D108316F3E7FE00C187E0 /* Debug */, 363 | 273D108416F3E7FE00C187E0 /* Release */, 364 | ); 365 | defaultConfigurationIsVisible = 0; 366 | defaultConfigurationName = Release; 367 | }; 368 | /* End XCConfigurationList section */ 369 | }; 370 | rootObject = 273D105716F3E7FE00C187E0 /* Project object */; 371 | } 372 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // MFSideMenuDemoStoryboard 4 | // 5 | // Created by Michael Frederick on 3/15/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // MFSideMenuDemoStoryboard 4 | // 5 | // Created by Michael Frederick on 3/15/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "MFSideMenuContainerViewController.h" 11 | 12 | @implementation AppDelegate 13 | 14 | @synthesize window; 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 19 | MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.window.rootViewController; 20 | UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"navigationController"]; 21 | UIViewController *leftSideMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@"leftSideMenuViewController"]; 22 | UIViewController *rightSideMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@"rightSideMenuViewController"]; 23 | 24 | [container setLeftMenuViewController:leftSideMenuViewController]; 25 | [container setRightMenuViewController:rightSideMenuViewController]; 26 | [container setCenterViewController:navigationController]; 27 | 28 | return YES; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/DemoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.h 3 | // MFSideMenuDemoStoryboard 4 | // 5 | // Created by Michael Frederick on 4/9/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DemoViewController : UIViewController 12 | 13 | - (IBAction)showLeftMenuPressed:(id)sender; 14 | - (IBAction)showRightMenuPressed:(id)sender; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/DemoViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.m 3 | // MFSideMenuDemoStoryboard 4 | // 5 | // Created by Michael Frederick on 4/9/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import "DemoViewController.h" 10 | #import "MFSideMenu.h" 11 | 12 | @interface DemoViewController () 13 | 14 | @end 15 | 16 | @implementation DemoViewController 17 | 18 | - (void)viewDidLoad 19 | { 20 | [super viewDidLoad]; 21 | } 22 | 23 | - (IBAction)showLeftMenuPressed:(id)sender { 24 | [self.menuContainerViewController toggleLeftSideMenuCompletion:nil]; 25 | } 26 | 27 | - (IBAction)showRightMenuPressed:(id)sender { 28 | [self.menuContainerViewController toggleRightSideMenuCompletion:nil]; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/Default-568h@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/Default.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/Default@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/back-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/back-arrow.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/back-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/back-arrow@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/menu-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/menu-icon.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/menu-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/Images/menu-icon@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | frederickdevelopment.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | MainStoryboard 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MFSideMenuDemoStoryboard' target in the 'MFSideMenuDemoStoryboard' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_5_0 8 | #warning "This project uses features only available in iOS SDK 5.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/SideMenuViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.h 3 | // MFSideMenuDemoStoryboard 4 | // 5 | // Created by Michael Frederick on 5/7/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SideMenuViewController : UITableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/SideMenuViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import "SideMenuViewController.h" 8 | #import "MFSideMenu.h" 9 | #import "DemoViewController.h" 10 | 11 | @implementation SideMenuViewController 12 | 13 | #pragma mark - 14 | #pragma mark - UITableViewDataSource 15 | 16 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 17 | return [NSString stringWithFormat:@"Section %d", section]; 18 | } 19 | 20 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 21 | return 2; 22 | } 23 | 24 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 25 | return 10; 26 | } 27 | 28 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 29 | static NSString *CellIdentifier = @"Cell"; 30 | 31 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 32 | if (cell == nil) { 33 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 34 | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 35 | } 36 | 37 | cell.textLabel.text = [NSString stringWithFormat:@"Item %d", indexPath.row]; 38 | 39 | return cell; 40 | } 41 | 42 | #pragma mark - 43 | #pragma mark - UITableViewDelegate 44 | 45 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 46 | DemoViewController *demoViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DemoViewController"]; 47 | demoViewController.title = [NSString stringWithFormat:@"Demo #%d-%d", indexPath.section, indexPath.row]; 48 | 49 | UINavigationController *navigationController = self.menuContainerViewController.centerViewController; 50 | NSArray *controllers = [NSArray arrayWithObject:demoViewController]; 51 | navigationController.viewControllers = controllers; 52 | [self.menuContainerViewController setMenuState:MFSideMenuStateClosed]; 53 | } 54 | 55 | @end -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/en.lproj/MainStoryboard.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MFSideMenuDemoStoryboard 4 | // 5 | // Created by Michael Frederick on 3/15/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 273D113C16F8841300C187E0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273D113B16F8841300C187E0 /* UIKit.framework */; }; 11 | 273D113E16F8841300C187E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273D113D16F8841300C187E0 /* Foundation.framework */; }; 12 | 273D114016F8841300C187E0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273D113F16F8841300C187E0 /* CoreGraphics.framework */; }; 13 | 273D114616F8841300C187E0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 273D114416F8841300C187E0 /* InfoPlist.strings */; }; 14 | 273D114816F8841300C187E0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 273D114716F8841300C187E0 /* main.m */; }; 15 | 273D114C16F8841300C187E0 /* MFAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 273D114B16F8841300C187E0 /* MFAppDelegate.m */; }; 16 | 273D116A16F884F900C187E0 /* DemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273D116616F884F900C187E0 /* DemoViewController.m */; }; 17 | 273D116B16F884F900C187E0 /* DemoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273D116716F884F900C187E0 /* DemoViewController.xib */; }; 18 | 273D116C16F884F900C187E0 /* SideMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273D116916F884F900C187E0 /* SideMenuViewController.m */; }; 19 | 273D117316F8859B00C187E0 /* back-arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 273D116E16F8859B00C187E0 /* back-arrow.png */; }; 20 | 273D117416F8859B00C187E0 /* back-arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 273D116F16F8859B00C187E0 /* back-arrow@2x.png */; }; 21 | 273D117516F8859B00C187E0 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 273D117016F8859B00C187E0 /* Default-568h@2x.png */; }; 22 | 273D117616F8859B00C187E0 /* menu-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 273D117116F8859B00C187E0 /* menu-icon.png */; }; 23 | 273D117716F8859B00C187E0 /* menu-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 273D117216F8859B00C187E0 /* menu-icon@2x.png */; }; 24 | 274419D617BBAF990007ADE7 /* MFSideMenuShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 274419D517BBAF990007ADE7 /* MFSideMenuShadow.m */; }; 25 | 276985BC1733D69200536685 /* MFSideMenuContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 276985BB1733D69200536685 /* MFSideMenuContainerViewController.m */; }; 26 | D081F051178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D081F050178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.m */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 273D113816F8841300C187E0 /* MFSideMenuDemoUITabBarController.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MFSideMenuDemoUITabBarController.app; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | 273D113B16F8841300C187E0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 32 | 273D113D16F8841300C187E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 33 | 273D113F16F8841300C187E0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 34 | 273D114316F8841300C187E0 /* MFSideMenuDemoUITabBarController-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MFSideMenuDemoUITabBarController-Info.plist"; sourceTree = ""; }; 35 | 273D114516F8841300C187E0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 36 | 273D114716F8841300C187E0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 37 | 273D114916F8841300C187E0 /* MFSideMenuDemoUITabBarController-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MFSideMenuDemoUITabBarController-Prefix.pch"; sourceTree = ""; }; 38 | 273D114A16F8841300C187E0 /* MFAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MFAppDelegate.h; sourceTree = ""; }; 39 | 273D114B16F8841300C187E0 /* MFAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MFAppDelegate.m; sourceTree = ""; }; 40 | 273D116516F884F900C187E0 /* DemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoViewController.h; sourceTree = ""; }; 41 | 273D116616F884F900C187E0 /* DemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoViewController.m; sourceTree = ""; }; 42 | 273D116716F884F900C187E0 /* DemoViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DemoViewController.xib; sourceTree = ""; }; 43 | 273D116816F884F900C187E0 /* SideMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SideMenuViewController.h; sourceTree = ""; }; 44 | 273D116916F884F900C187E0 /* SideMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SideMenuViewController.m; sourceTree = ""; }; 45 | 273D116E16F8859B00C187E0 /* back-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-arrow.png"; sourceTree = ""; }; 46 | 273D116F16F8859B00C187E0 /* back-arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-arrow@2x.png"; sourceTree = ""; }; 47 | 273D117016F8859B00C187E0 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 48 | 273D117116F8859B00C187E0 /* menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon.png"; sourceTree = ""; }; 49 | 273D117216F8859B00C187E0 /* menu-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon@2x.png"; sourceTree = ""; }; 50 | 274419D417BBAF990007ADE7 /* MFSideMenuShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenuShadow.h; sourceTree = ""; }; 51 | 274419D517BBAF990007ADE7 /* MFSideMenuShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFSideMenuShadow.m; sourceTree = ""; }; 52 | 276985BA1733D69200536685 /* MFSideMenuContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenuContainerViewController.h; sourceTree = ""; }; 53 | 276985BB1733D69200536685 /* MFSideMenuContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFSideMenuContainerViewController.m; sourceTree = ""; }; 54 | D081F04E178E6AD3004A89D0 /* MFSideMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFSideMenu.h; sourceTree = ""; }; 55 | D081F04F178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+MFSideMenuAdditions.h"; sourceTree = ""; }; 56 | D081F050178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+MFSideMenuAdditions.m"; sourceTree = ""; }; 57 | /* End PBXFileReference section */ 58 | 59 | /* Begin PBXFrameworksBuildPhase section */ 60 | 273D113516F8841300C187E0 /* Frameworks */ = { 61 | isa = PBXFrameworksBuildPhase; 62 | buildActionMask = 2147483647; 63 | files = ( 64 | 273D113C16F8841300C187E0 /* UIKit.framework in Frameworks */, 65 | 273D113E16F8841300C187E0 /* Foundation.framework in Frameworks */, 66 | 273D114016F8841300C187E0 /* CoreGraphics.framework in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | /* End PBXFrameworksBuildPhase section */ 71 | 72 | /* Begin PBXGroup section */ 73 | 273D112F16F8841300C187E0 = { 74 | isa = PBXGroup; 75 | children = ( 76 | 273D115816F8843600C187E0 /* MFSideMenu */, 77 | 273D114116F8841300C187E0 /* MFSideMenuDemoUITabBarController */, 78 | 273D113A16F8841300C187E0 /* Frameworks */, 79 | 273D113916F8841300C187E0 /* Products */, 80 | ); 81 | sourceTree = ""; 82 | }; 83 | 273D113916F8841300C187E0 /* Products */ = { 84 | isa = PBXGroup; 85 | children = ( 86 | 273D113816F8841300C187E0 /* MFSideMenuDemoUITabBarController.app */, 87 | ); 88 | name = Products; 89 | sourceTree = ""; 90 | }; 91 | 273D113A16F8841300C187E0 /* Frameworks */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | 273D113B16F8841300C187E0 /* UIKit.framework */, 95 | 273D113D16F8841300C187E0 /* Foundation.framework */, 96 | 273D113F16F8841300C187E0 /* CoreGraphics.framework */, 97 | ); 98 | name = Frameworks; 99 | sourceTree = ""; 100 | }; 101 | 273D114116F8841300C187E0 /* MFSideMenuDemoUITabBarController */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | 273D114A16F8841300C187E0 /* MFAppDelegate.h */, 105 | 273D114B16F8841300C187E0 /* MFAppDelegate.m */, 106 | 273D116516F884F900C187E0 /* DemoViewController.h */, 107 | 273D116616F884F900C187E0 /* DemoViewController.m */, 108 | 273D116716F884F900C187E0 /* DemoViewController.xib */, 109 | 273D116816F884F900C187E0 /* SideMenuViewController.h */, 110 | 273D116916F884F900C187E0 /* SideMenuViewController.m */, 111 | 273D116D16F8859B00C187E0 /* Images */, 112 | 273D114216F8841300C187E0 /* Supporting Files */, 113 | ); 114 | path = MFSideMenuDemoUITabBarController; 115 | sourceTree = ""; 116 | }; 117 | 273D114216F8841300C187E0 /* Supporting Files */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 273D114316F8841300C187E0 /* MFSideMenuDemoUITabBarController-Info.plist */, 121 | 273D114416F8841300C187E0 /* InfoPlist.strings */, 122 | 273D114716F8841300C187E0 /* main.m */, 123 | 273D114916F8841300C187E0 /* MFSideMenuDemoUITabBarController-Prefix.pch */, 124 | ); 125 | name = "Supporting Files"; 126 | sourceTree = ""; 127 | }; 128 | 273D115816F8843600C187E0 /* MFSideMenu */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | D081F04E178E6AD3004A89D0 /* MFSideMenu.h */, 132 | D081F04F178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.h */, 133 | D081F050178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.m */, 134 | 276985BA1733D69200536685 /* MFSideMenuContainerViewController.h */, 135 | 276985BB1733D69200536685 /* MFSideMenuContainerViewController.m */, 136 | 274419D417BBAF990007ADE7 /* MFSideMenuShadow.h */, 137 | 274419D517BBAF990007ADE7 /* MFSideMenuShadow.m */, 138 | ); 139 | name = MFSideMenu; 140 | path = ../../MFSideMenu; 141 | sourceTree = ""; 142 | }; 143 | 273D116D16F8859B00C187E0 /* Images */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | 273D116E16F8859B00C187E0 /* back-arrow.png */, 147 | 273D116F16F8859B00C187E0 /* back-arrow@2x.png */, 148 | 273D117016F8859B00C187E0 /* Default-568h@2x.png */, 149 | 273D117116F8859B00C187E0 /* menu-icon.png */, 150 | 273D117216F8859B00C187E0 /* menu-icon@2x.png */, 151 | ); 152 | path = Images; 153 | sourceTree = ""; 154 | }; 155 | /* End PBXGroup section */ 156 | 157 | /* Begin PBXNativeTarget section */ 158 | 273D113716F8841300C187E0 /* MFSideMenuDemoUITabBarController */ = { 159 | isa = PBXNativeTarget; 160 | buildConfigurationList = 273D115516F8841300C187E0 /* Build configuration list for PBXNativeTarget "MFSideMenuDemoUITabBarController" */; 161 | buildPhases = ( 162 | 273D113416F8841300C187E0 /* Sources */, 163 | 273D113516F8841300C187E0 /* Frameworks */, 164 | 273D113616F8841300C187E0 /* Resources */, 165 | ); 166 | buildRules = ( 167 | ); 168 | dependencies = ( 169 | ); 170 | name = MFSideMenuDemoUITabBarController; 171 | productName = MFSideMenuDemoUITabBarController; 172 | productReference = 273D113816F8841300C187E0 /* MFSideMenuDemoUITabBarController.app */; 173 | productType = "com.apple.product-type.application"; 174 | }; 175 | /* End PBXNativeTarget section */ 176 | 177 | /* Begin PBXProject section */ 178 | 273D113016F8841300C187E0 /* Project object */ = { 179 | isa = PBXProject; 180 | attributes = { 181 | CLASSPREFIX = MF; 182 | LastUpgradeCheck = 0460; 183 | ORGANIZATIONNAME = "Michael Frederick"; 184 | }; 185 | buildConfigurationList = 273D113316F8841300C187E0 /* Build configuration list for PBXProject "MFSideMenuDemoUITabBarController" */; 186 | compatibilityVersion = "Xcode 3.2"; 187 | developmentRegion = English; 188 | hasScannedForEncodings = 0; 189 | knownRegions = ( 190 | en, 191 | ); 192 | mainGroup = 273D112F16F8841300C187E0; 193 | productRefGroup = 273D113916F8841300C187E0 /* Products */; 194 | projectDirPath = ""; 195 | projectRoot = ""; 196 | targets = ( 197 | 273D113716F8841300C187E0 /* MFSideMenuDemoUITabBarController */, 198 | ); 199 | }; 200 | /* End PBXProject section */ 201 | 202 | /* Begin PBXResourcesBuildPhase section */ 203 | 273D113616F8841300C187E0 /* Resources */ = { 204 | isa = PBXResourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 273D114616F8841300C187E0 /* InfoPlist.strings in Resources */, 208 | 273D116B16F884F900C187E0 /* DemoViewController.xib in Resources */, 209 | 273D117316F8859B00C187E0 /* back-arrow.png in Resources */, 210 | 273D117416F8859B00C187E0 /* back-arrow@2x.png in Resources */, 211 | 273D117516F8859B00C187E0 /* Default-568h@2x.png in Resources */, 212 | 273D117616F8859B00C187E0 /* menu-icon.png in Resources */, 213 | 273D117716F8859B00C187E0 /* menu-icon@2x.png in Resources */, 214 | ); 215 | runOnlyForDeploymentPostprocessing = 0; 216 | }; 217 | /* End PBXResourcesBuildPhase section */ 218 | 219 | /* Begin PBXSourcesBuildPhase section */ 220 | 273D113416F8841300C187E0 /* Sources */ = { 221 | isa = PBXSourcesBuildPhase; 222 | buildActionMask = 2147483647; 223 | files = ( 224 | 273D114816F8841300C187E0 /* main.m in Sources */, 225 | 273D114C16F8841300C187E0 /* MFAppDelegate.m in Sources */, 226 | 274419D617BBAF990007ADE7 /* MFSideMenuShadow.m in Sources */, 227 | 273D116A16F884F900C187E0 /* DemoViewController.m in Sources */, 228 | 273D116C16F884F900C187E0 /* SideMenuViewController.m in Sources */, 229 | 276985BC1733D69200536685 /* MFSideMenuContainerViewController.m in Sources */, 230 | D081F051178E6AD3004A89D0 /* UIViewController+MFSideMenuAdditions.m in Sources */, 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | }; 234 | /* End PBXSourcesBuildPhase section */ 235 | 236 | /* Begin PBXVariantGroup section */ 237 | 273D114416F8841300C187E0 /* InfoPlist.strings */ = { 238 | isa = PBXVariantGroup; 239 | children = ( 240 | 273D114516F8841300C187E0 /* en */, 241 | ); 242 | name = InfoPlist.strings; 243 | sourceTree = ""; 244 | }; 245 | /* End PBXVariantGroup section */ 246 | 247 | /* Begin XCBuildConfiguration section */ 248 | 273D115316F8841300C187E0 /* Debug */ = { 249 | isa = XCBuildConfiguration; 250 | buildSettings = { 251 | ALWAYS_SEARCH_USER_PATHS = NO; 252 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 253 | CLANG_CXX_LIBRARY = "libc++"; 254 | CLANG_ENABLE_OBJC_ARC = YES; 255 | CLANG_WARN_CONSTANT_CONVERSION = YES; 256 | CLANG_WARN_EMPTY_BODY = YES; 257 | CLANG_WARN_ENUM_CONVERSION = YES; 258 | CLANG_WARN_INT_CONVERSION = YES; 259 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 260 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 261 | COPY_PHASE_STRIP = NO; 262 | GCC_C_LANGUAGE_STANDARD = gnu99; 263 | GCC_DYNAMIC_NO_PIC = NO; 264 | GCC_OPTIMIZATION_LEVEL = 0; 265 | GCC_PREPROCESSOR_DEFINITIONS = ( 266 | "DEBUG=1", 267 | "$(inherited)", 268 | ); 269 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 271 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 272 | GCC_WARN_UNUSED_VARIABLE = YES; 273 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 274 | ONLY_ACTIVE_ARCH = YES; 275 | SDKROOT = iphoneos; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 273D115416F8841300C187E0 /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ALWAYS_SEARCH_USER_PATHS = NO; 284 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 285 | CLANG_CXX_LIBRARY = "libc++"; 286 | CLANG_ENABLE_OBJC_ARC = YES; 287 | CLANG_WARN_CONSTANT_CONVERSION = YES; 288 | CLANG_WARN_EMPTY_BODY = YES; 289 | CLANG_WARN_ENUM_CONVERSION = YES; 290 | CLANG_WARN_INT_CONVERSION = YES; 291 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 292 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 293 | COPY_PHASE_STRIP = YES; 294 | GCC_C_LANGUAGE_STANDARD = gnu99; 295 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 296 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 297 | GCC_WARN_UNUSED_VARIABLE = YES; 298 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 299 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 300 | SDKROOT = iphoneos; 301 | TARGETED_DEVICE_FAMILY = "1,2"; 302 | VALIDATE_PRODUCT = YES; 303 | }; 304 | name = Release; 305 | }; 306 | 273D115616F8841300C187E0 /* Debug */ = { 307 | isa = XCBuildConfiguration; 308 | buildSettings = { 309 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 310 | GCC_PREFIX_HEADER = "MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController-Prefix.pch"; 311 | INFOPLIST_FILE = "MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController-Info.plist"; 312 | PRODUCT_NAME = "$(TARGET_NAME)"; 313 | WRAPPER_EXTENSION = app; 314 | }; 315 | name = Debug; 316 | }; 317 | 273D115716F8841300C187E0 /* Release */ = { 318 | isa = XCBuildConfiguration; 319 | buildSettings = { 320 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 321 | GCC_PREFIX_HEADER = "MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController-Prefix.pch"; 322 | INFOPLIST_FILE = "MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController-Info.plist"; 323 | PRODUCT_NAME = "$(TARGET_NAME)"; 324 | WRAPPER_EXTENSION = app; 325 | }; 326 | name = Release; 327 | }; 328 | /* End XCBuildConfiguration section */ 329 | 330 | /* Begin XCConfigurationList section */ 331 | 273D113316F8841300C187E0 /* Build configuration list for PBXProject "MFSideMenuDemoUITabBarController" */ = { 332 | isa = XCConfigurationList; 333 | buildConfigurations = ( 334 | 273D115316F8841300C187E0 /* Debug */, 335 | 273D115416F8841300C187E0 /* Release */, 336 | ); 337 | defaultConfigurationIsVisible = 0; 338 | defaultConfigurationName = Release; 339 | }; 340 | 273D115516F8841300C187E0 /* Build configuration list for PBXNativeTarget "MFSideMenuDemoUITabBarController" */ = { 341 | isa = XCConfigurationList; 342 | buildConfigurations = ( 343 | 273D115616F8841300C187E0 /* Debug */, 344 | 273D115716F8841300C187E0 /* Release */, 345 | ); 346 | defaultConfigurationIsVisible = 0; 347 | defaultConfigurationName = Release; 348 | }; 349 | /* End XCConfigurationList section */ 350 | }; 351 | rootObject = 273D113016F8841300C187E0 /* Project object */; 352 | } 353 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/DemoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import 9 | 10 | @interface DemoViewController : UIViewController 11 | 12 | - (IBAction)pushAnotherPressed:(id)sender; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/DemoViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | // 7 | 8 | #import "DemoViewController.h" 9 | #import "MFSideMenu.h" 10 | 11 | @implementation DemoViewController 12 | 13 | 14 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 15 | return YES; 16 | } 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | if(!self.title) self.title = @"Demo!"; 21 | 22 | [self setupMenuBarButtonItems]; 23 | } 24 | 25 | #pragma mark - 26 | #pragma mark - UIBarButtonItems 27 | 28 | - (void)setupMenuBarButtonItems { 29 | self.navigationItem.rightBarButtonItem = [self rightMenuBarButtonItem]; 30 | if(self.menuContainerViewController.menuState == MFSideMenuStateClosed && 31 | ![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) { 32 | self.navigationItem.leftBarButtonItem = [self backBarButtonItem]; 33 | } else { 34 | self.navigationItem.leftBarButtonItem = [self leftMenuBarButtonItem]; 35 | } 36 | } 37 | 38 | - (UIBarButtonItem *)leftMenuBarButtonItem { 39 | return [[UIBarButtonItem alloc] 40 | initWithImage:[UIImage imageNamed:@"menu-icon.png"] style:UIBarButtonItemStyleBordered 41 | target:self 42 | action:@selector(leftSideMenuButtonPressed:)]; 43 | } 44 | 45 | - (UIBarButtonItem *)rightMenuBarButtonItem { 46 | return [[UIBarButtonItem alloc] 47 | initWithImage:[UIImage imageNamed:@"menu-icon.png"] style:UIBarButtonItemStyleBordered 48 | target:self 49 | action:@selector(rightSideMenuButtonPressed:)]; 50 | } 51 | 52 | - (UIBarButtonItem *)backBarButtonItem { 53 | return [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back-arrow"] 54 | style:UIBarButtonItemStyleBordered 55 | target:self 56 | action:@selector(backButtonPressed:)]; 57 | } 58 | 59 | 60 | #pragma mark - 61 | #pragma mark - UIBarButtonItem Callbacks 62 | 63 | - (void)backButtonPressed:(id)sender { 64 | [self.navigationController popViewControllerAnimated:YES]; 65 | } 66 | 67 | - (void)leftSideMenuButtonPressed:(id)sender { 68 | [self.menuContainerViewController toggleLeftSideMenuCompletion:^{ 69 | [self setupMenuBarButtonItems]; 70 | }]; 71 | } 72 | 73 | - (void)rightSideMenuButtonPressed:(id)sender { 74 | [self.menuContainerViewController toggleRightSideMenuCompletion:^{ 75 | [self setupMenuBarButtonItems]; 76 | }]; 77 | } 78 | 79 | 80 | #pragma mark - 81 | #pragma mark - IBActions 82 | 83 | - (IBAction)pushAnotherPressed:(id)sender { 84 | DemoViewController *demoController = [[DemoViewController alloc] 85 | initWithNibName:@"DemoViewController" 86 | bundle:nil]; 87 | 88 | [self.navigationController pushViewController:demoController animated:YES]; 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/DemoViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1552 5 | 12C60 6 | 3084 7 | 1187.34 8 | 625.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 2083 12 | 13 | 14 | IBProxyObject 15 | IBUIButton 16 | IBUITextView 17 | IBUIView 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBCocoaTouchFramework 30 | 31 | 32 | IBFirstResponder 33 | IBCocoaTouchFramework 34 | 35 | 36 | 37 | 274 38 | 39 | 40 | 41 | 290 42 | {{20, 142}, {280, 37}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | IBCocoaTouchFramework 49 | 0 50 | 0 51 | 1 52 | Push Another Controller 53 | 54 | 3 55 | MQA 56 | 57 | 58 | 1 59 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 60 | 61 | 62 | 3 63 | MC41AA 64 | 65 | 66 | 2 67 | 15 68 | 69 | 70 | Helvetica-Bold 71 | 15 72 | 16 73 | 74 | 75 | 76 | 77 | 290 78 | {{20, 20}, {280, 102}} 79 | 80 | 81 | 82 | _NS:9 83 | 84 | 1 85 | MSAxIDEAA 86 | 87 | YES 88 | YES 89 | NO 90 | IBCocoaTouchFramework 91 | NO 92 | 93 | 94 | 2 95 | IBCocoaTouchFramework 96 | 97 | 98 | 1 99 | 14 100 | 101 | 102 | Helvetica 103 | 14 104 | 16 105 | 106 | 107 | 108 | {{0, 64}, {320, 504}} 109 | 110 | 111 | 112 | 113 | 3 114 | MQA 115 | 116 | 2 117 | 118 | 119 | 120 | 121 | NO 122 | 123 | 124 | IBUIScreenMetrics 125 | 126 | YES 127 | 128 | 129 | 130 | 131 | 132 | {320, 568} 133 | {568, 320} 134 | 135 | 136 | IBCocoaTouchFramework 137 | Retina 4 Full Screen 138 | 2 139 | 140 | IBCocoaTouchFramework 141 | 142 | 143 | 144 | 145 | 146 | 147 | view 148 | 149 | 150 | 151 | 4 152 | 153 | 154 | 155 | pushAnotherPressed: 156 | 157 | 158 | 7 159 | 160 | 6 161 | 162 | 163 | 164 | 165 | 166 | 0 167 | 168 | 169 | 170 | 171 | 172 | 1 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | -1 182 | 183 | 184 | File's Owner 185 | 186 | 187 | -2 188 | 189 | 190 | 191 | 192 | 5 193 | 194 | 195 | 196 | 197 | 198 | 7 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | DemoViewController 207 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 208 | UIResponder 209 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 210 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 211 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 212 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 213 | 214 | 215 | 216 | 217 | 218 | 18 219 | 220 | 221 | 222 | 223 | DemoViewController 224 | UIViewController 225 | 226 | pushAnotherPressed: 227 | id 228 | 229 | 230 | pushAnotherPressed: 231 | 232 | pushAnotherPressed: 233 | id 234 | 235 | 236 | 237 | IBProjectSource 238 | ./Classes/DemoViewController.h 239 | 240 | 241 | 242 | 243 | 0 244 | IBCocoaTouchFramework 245 | 246 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 247 | 248 | 249 | YES 250 | 3 251 | 2083 252 | 253 | 254 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/Default-568h@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/back-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/back-arrow.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/back-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/back-arrow@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/menu-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/menu-icon.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/menu-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikefrederick/MFSideMenu/ac0639391df9f4a81822d3272ac8c6feef338852/Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/Images/menu-icon@2x.png -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/MFAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.h 3 | // MFSideMenuDemoUITabBarController 4 | // 5 | // Created by Michael Frederick on 3/19/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MFAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/MFAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFAppDelegate.m 3 | // MFSideMenuDemoUITabBarController 4 | // 5 | // Created by Michael Frederick on 3/19/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import "MFAppDelegate.h" 10 | #import "MFSideMenuContainerViewController.h" 11 | #import "DemoViewController.h" 12 | #import "SideMenuViewController.h" 13 | 14 | @implementation MFAppDelegate 15 | 16 | @synthesize window = _window; 17 | 18 | - (DemoViewController *)demoController { 19 | return [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 20 | } 21 | 22 | - (UINavigationController *)navigationController { 23 | return [[UINavigationController alloc] 24 | initWithRootViewController:[self demoController]]; 25 | } 26 | 27 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 28 | { 29 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 30 | 31 | UITabBarController *tabBarController = [[UITabBarController alloc] init]; 32 | [tabBarController setViewControllers:[NSArray arrayWithObjects:[self navigationController], 33 | [self navigationController], nil]]; 34 | 35 | SideMenuViewController *leftSideMenuController = [[SideMenuViewController alloc] init]; 36 | SideMenuViewController *rightSideMenuController = [[SideMenuViewController alloc] init]; 37 | MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController 38 | containerWithCenterViewController:tabBarController 39 | leftMenuViewController:leftSideMenuController 40 | rightMenuViewController:rightSideMenuController]; 41 | 42 | self.window.rootViewController = container; 43 | [self.window makeKeyAndVisible]; 44 | 45 | return YES; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | frederickdevelopment.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MFSideMenuDemoUITabBarController' target in the 'MFSideMenuDemoUITabBarController' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_3_0 8 | #warning "This project uses features only available in iOS SDK 3.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/SideMenuViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.h 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import 8 | 9 | @interface SideMenuViewController : UITableViewController 10 | 11 | @end -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/SideMenuViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SideMenuViewController.m 3 | // MFSideMenuDemo 4 | // 5 | // Created by Michael Frederick on 3/19/12. 6 | 7 | #import "SideMenuViewController.h" 8 | #import "MFSideMenu.h" 9 | #import "DemoViewController.h" 10 | 11 | @implementation SideMenuViewController 12 | 13 | #pragma mark - 14 | #pragma mark - UITableViewDataSource 15 | 16 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 17 | return [NSString stringWithFormat:@"Section %d", section]; 18 | } 19 | 20 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 21 | return 2; 22 | } 23 | 24 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 25 | return 10; 26 | } 27 | 28 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 29 | static NSString *CellIdentifier = @"Cell"; 30 | 31 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 32 | if (cell == nil) { 33 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 34 | } 35 | 36 | cell.textLabel.text = [NSString stringWithFormat:@"Item %d", indexPath.row]; 37 | 38 | return cell; 39 | } 40 | 41 | #pragma mark - 42 | #pragma mark - UITableViewDelegate 43 | 44 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 45 | DemoViewController *demoController = [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 46 | demoController.title = [NSString stringWithFormat:@"Demo #%d-%d", indexPath.section, indexPath.row]; 47 | 48 | UITabBarController *tabBarController = self.menuContainerViewController.centerViewController; 49 | UINavigationController *navigationController = (UINavigationController *)tabBarController.selectedViewController; 50 | NSArray *controllers = [NSArray arrayWithObject:demoController]; 51 | navigationController.viewControllers = controllers; 52 | [self.menuContainerViewController setMenuState:MFSideMenuStateClosed]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demos/MFSideMenuDemoUITabBarController/MFSideMenuDemoUITabBarController/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MFSideMenuDemoUITabBarController 4 | // 5 | // Created by Michael Frederick on 3/19/13. 6 | // Copyright (c) 2013 Michael Frederick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "MFAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([MFAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | * Copyright (c) 2012, Michael Frederick 2 | * All rights reserved. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * * Redistributions of source code must retain the above copyright 7 | * notice, this list of conditions and the following disclaimer. 8 | * * Redistributions in binary form must reproduce the above copyright 9 | * notice, this list of conditions and the following disclaimer in the 10 | * documentation and/or other materials provided with the distribution. 11 | * * Neither the name of Michael Frederick nor the 12 | * names of its contributors may be used to endorse or promote products 13 | * derived from this software without specific prior written permission. 14 | * 15 | * THIS SOFTWARE IS PROVIDED BY Michael Frederick ''AS IS'' AND ANY 16 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | * DISCLAIMED. IN NO EVENT SHALL Michael Frederick BE LIABLE FOR ANY 19 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /MFSideMenu.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'MFSideMenu' 3 | s.version = '0.5.5' 4 | s.license = 'BSD' 5 | s.summary = 'Facebook-like side menu for iOS.' 6 | s.homepage = 'https://github.com/mikefrederick/MFSideMenu' 7 | s.author = { 'Michael Frederick' => 'mike@viamike.com' } 8 | s.source = { :git => 'https://github.com/mikefrederick/MFSideMenu.git', :tag => s.version.to_s } 9 | s.platform = :ios 10 | s.requires_arc = true 11 | s.source_files = 'MFSideMenu/*' 12 | s.frameworks = 'QuartzCore' 13 | end 14 | -------------------------------------------------------------------------------- /MFSideMenu.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 18 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /MFSideMenu.xcworkspace/xcshareddata/MFSideMenu.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 515D6BF1-B9FE-47D6-993F-1203ACC13D13 9 | IDESourceControlProjectName 10 | MFSideMenu 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | CD68483B-F67E-4A4D-B2FE-5CE4BCC519F7 14 | https://github.com/mikefrederick/MFSideMenu.git 15 | 16 | IDESourceControlProjectPath 17 | MFSideMenu.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | CD68483B-F67E-4A4D-B2FE-5CE4BCC519F7 21 | .. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/mikefrederick/MFSideMenu.git 25 | IDESourceControlProjectVersion 26 | 110 27 | IDESourceControlProjectWCCIdentifier 28 | CD68483B-F67E-4A4D-B2FE-5CE4BCC519F7 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | CD68483B-F67E-4A4D-B2FE-5CE4BCC519F7 36 | IDESourceControlWCCName 37 | MFSideMenu 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /MFSideMenu/MFSideMenu.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFSideMenu.h 3 | // MFSideMenuDemoBasic 4 | // 5 | // Created by Michael Frederick on 5/5/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import "MFSideMenuContainerViewController.h" 10 | #import "UIViewController+MFSideMenuAdditions.h" -------------------------------------------------------------------------------- /MFSideMenu/MFSideMenuContainerViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFSideMenuContainerViewController.h 3 | // MFSideMenuDemoSplitViewController 4 | // 5 | // Created by Michael Frederick on 4/2/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MFSideMenuShadow.h" 11 | 12 | extern NSString * const MFSideMenuStateNotificationEvent; 13 | 14 | typedef enum { 15 | MFSideMenuPanModeNone = 0, // pan disabled 16 | MFSideMenuPanModeCenterViewController = 1 << 0, // enable panning on the centerViewController 17 | MFSideMenuPanModeSideMenu = 1 << 1, // enable panning on side menus 18 | MFSideMenuPanModeDefault = MFSideMenuPanModeCenterViewController | MFSideMenuPanModeSideMenu 19 | } MFSideMenuPanMode; 20 | 21 | typedef enum { 22 | MFSideMenuStateClosed, // the menu is closed 23 | MFSideMenuStateLeftMenuOpen, // the left-hand menu is open 24 | MFSideMenuStateRightMenuOpen // the right-hand menu is open 25 | } MFSideMenuState; 26 | 27 | typedef enum { 28 | MFSideMenuStateEventMenuWillOpen, // the menu is going to open 29 | MFSideMenuStateEventMenuDidOpen, // the menu finished opening 30 | MFSideMenuStateEventMenuWillClose, // the menu is going to close 31 | MFSideMenuStateEventMenuDidClose // the menu finished closing 32 | } MFSideMenuStateEvent; 33 | 34 | 35 | @interface MFSideMenuContainerViewController : UIViewController 36 | 37 | + (MFSideMenuContainerViewController *)containerWithCenterViewController:(id)centerViewController 38 | leftMenuViewController:(id)leftMenuViewController 39 | rightMenuViewController:(id)rightMenuViewController; 40 | 41 | @property (nonatomic, strong) id centerViewController; 42 | @property (nonatomic, strong) UIViewController *leftMenuViewController; 43 | @property (nonatomic, strong) UIViewController *rightMenuViewController; 44 | 45 | @property (nonatomic, assign) MFSideMenuState menuState; 46 | @property (nonatomic, assign) MFSideMenuPanMode panMode; 47 | 48 | // menu open/close animation duration -- user can pan faster than default duration, max duration sets the limit 49 | @property (nonatomic, assign) CGFloat menuAnimationDefaultDuration; 50 | @property (nonatomic, assign) CGFloat menuAnimationMaxDuration; 51 | 52 | // width of the side menus 53 | @property (nonatomic, assign) CGFloat menuWidth; 54 | @property (nonatomic, assign) CGFloat leftMenuWidth; 55 | @property (nonatomic, assign) CGFloat rightMenuWidth; 56 | 57 | // shadow 58 | @property (nonatomic, strong) MFSideMenuShadow *shadow; 59 | 60 | // menu slide-in animation 61 | @property (nonatomic, assign) BOOL menuSlideAnimationEnabled; 62 | @property (nonatomic, assign) CGFloat menuSlideAnimationFactor; // higher = less menu movement on animation 63 | 64 | 65 | - (void)toggleLeftSideMenuCompletion:(void (^)(void))completion; 66 | - (void)toggleRightSideMenuCompletion:(void (^)(void))completion; 67 | - (void)setMenuState:(MFSideMenuState)menuState completion:(void (^)(void))completion; 68 | - (void)setMenuWidth:(CGFloat)menuWidth animated:(BOOL)animated; 69 | - (void)setLeftMenuWidth:(CGFloat)leftMenuWidth animated:(BOOL)animated; 70 | - (void)setRightMenuWidth:(CGFloat)rightMenuWidth animated:(BOOL)animated; 71 | 72 | // can be used to attach a pan gesture recognizer to a custom view 73 | - (UIPanGestureRecognizer *)panGestureRecognizer; 74 | 75 | @end -------------------------------------------------------------------------------- /MFSideMenu/MFSideMenuShadow.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFSideMenuShadow.h 3 | // MFSideMenuDemoSearchBar 4 | // 5 | // Created by Michael Frederick on 5/13/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MFSideMenuShadow : NSObject 12 | 13 | @property (nonatomic, assign) BOOL enabled; 14 | @property (nonatomic, assign) CGFloat radius; 15 | @property (nonatomic, assign) CGFloat opacity; 16 | @property (nonatomic, strong) UIColor *color; 17 | @property (nonatomic, assign) UIView *shadowedView; 18 | 19 | + (MFSideMenuShadow *)shadowWithView:(UIView *)shadowedView; 20 | + (MFSideMenuShadow *)shadowWithColor:(UIColor *)color radius:(CGFloat)radius opacity:(CGFloat)opacity; 21 | 22 | - (void)draw; 23 | - (void)shadowedViewWillRotate; 24 | - (void)shadowedViewDidRotate; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /MFSideMenu/MFSideMenuShadow.m: -------------------------------------------------------------------------------- 1 | // 2 | // MFSideMenuShadow.m 3 | // MFSideMenuDemoSearchBar 4 | // 5 | // Created by Michael Frederick on 5/13/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import "MFSideMenuShadow.h" 10 | #import 11 | 12 | @implementation MFSideMenuShadow 13 | 14 | @synthesize color = _color; 15 | @synthesize opacity = _opacity; 16 | @synthesize radius = _radius; 17 | @synthesize enabled = _enabled; 18 | @synthesize shadowedView; 19 | 20 | + (MFSideMenuShadow *)shadowWithView:(UIView *)shadowedView { 21 | MFSideMenuShadow *shadow = [MFSideMenuShadow shadowWithColor:[UIColor blackColor] radius:10.0f opacity:0.75f]; 22 | shadow.shadowedView = shadowedView; 23 | return shadow; 24 | } 25 | 26 | + (MFSideMenuShadow *)shadowWithColor:(UIColor *)color radius:(CGFloat)radius opacity:(CGFloat)opacity { 27 | MFSideMenuShadow *shadow = [MFSideMenuShadow new]; 28 | shadow.color = color; 29 | shadow.radius = radius; 30 | shadow.opacity = opacity; 31 | return shadow; 32 | } 33 | 34 | - (id)init { 35 | self = [super init]; 36 | if(self) { 37 | self.color = [UIColor blackColor]; 38 | self.opacity = 0.75f; 39 | self.radius = 10.0f; 40 | self.enabled = YES; 41 | } 42 | return self; 43 | } 44 | 45 | 46 | #pragma mark - 47 | #pragma mark - Property Setters 48 | 49 | - (void)setEnabled:(BOOL)shadowEnabled { 50 | _enabled = shadowEnabled; 51 | [self draw]; 52 | } 53 | 54 | - (void)setRadius:(CGFloat)shadowRadius { 55 | _radius = shadowRadius; 56 | [self draw]; 57 | } 58 | 59 | - (void)setColor:(UIColor *)shadowColor { 60 | _color = shadowColor; 61 | [self draw]; 62 | } 63 | 64 | - (void)setOpacity:(CGFloat)shadowOpacity { 65 | _opacity = shadowOpacity; 66 | [self draw]; 67 | } 68 | 69 | 70 | #pragma mark - 71 | #pragma mark - Drawing 72 | 73 | - (void)draw { 74 | if(_enabled) { 75 | [self show]; 76 | } else { 77 | [self hide]; 78 | } 79 | } 80 | 81 | - (void)show { 82 | CGRect pathRect = self.shadowedView.bounds; 83 | pathRect.size = self.shadowedView.frame.size; 84 | self.shadowedView.layer.shadowPath = [UIBezierPath bezierPathWithRect:pathRect].CGPath; 85 | self.shadowedView.layer.shadowOpacity = self.opacity; 86 | self.shadowedView.layer.shadowRadius = self.radius; 87 | self.shadowedView.layer.shadowColor = [self.color CGColor]; 88 | self.shadowedView.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 89 | } 90 | 91 | - (void)hide { 92 | self.shadowedView.layer.shadowOpacity = 0.0f; 93 | self.shadowedView.layer.shadowRadius = 0.0f; 94 | } 95 | 96 | 97 | #pragma mark - 98 | #pragma mark - ShadowedView Rotation 99 | 100 | - (void)shadowedViewWillRotate { 101 | self.shadowedView.layer.shadowPath = nil; 102 | self.shadowedView.layer.shouldRasterize = YES; 103 | } 104 | 105 | - (void)shadowedViewDidRotate { 106 | [self draw]; 107 | self.shadowedView.layer.shouldRasterize = NO; 108 | } 109 | 110 | @end 111 | -------------------------------------------------------------------------------- /MFSideMenu/UIViewController+MFSideMenuAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MFSideMenuAdditions.h 3 | // MFSideMenuDemoBasic 4 | // 5 | // Created by Michael Frederick on 4/2/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import 10 | @class MFSideMenuContainerViewController; 11 | 12 | // category on UIViewController to provide reference to the menuContainerViewController in any of the contained View Controllers 13 | @interface UIViewController (MFSideMenuAdditions) 14 | 15 | @property(nonatomic,readonly,retain) MFSideMenuContainerViewController *menuContainerViewController; 16 | 17 | @end 18 | 19 | -------------------------------------------------------------------------------- /MFSideMenu/UIViewController+MFSideMenuAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MFSideMenuAdditions.m 3 | // MFSideMenuDemoBasic 4 | // 5 | // Created by Michael Frederick on 4/2/13. 6 | // Copyright (c) 2013 Frederick Development. All rights reserved. 7 | // 8 | 9 | #import "UIViewController+MFSideMenuAdditions.h" 10 | #import "MFSideMenuContainerViewController.h" 11 | 12 | @implementation UIViewController (MFSideMenuAdditions) 13 | 14 | @dynamic menuContainerViewController; 15 | 16 | - (MFSideMenuContainerViewController *)menuContainerViewController { 17 | id containerView = self; 18 | while (![containerView isKindOfClass:[MFSideMenuContainerViewController class]] && containerView) { 19 | if ([containerView respondsToSelector:@selector(parentViewController)]) 20 | containerView = [containerView parentViewController]; 21 | if ([containerView respondsToSelector:@selector(splitViewController)] && !containerView) 22 | containerView = [containerView splitViewController]; 23 | } 24 | return containerView; 25 | } 26 | 27 | @end -------------------------------------------------------------------------------- /README.mdown: -------------------------------------------------------------------------------- 1 | #MFSideMenu 2 | 3 | This project was inspired by the side-menu functionality seen in the Facebook iOS app. MFSideMenu utilizes view controller containment and gives you a simple API for implementing side-menu functionality. It integrates with storyboard-based apps as well as traditional setups. 4 | 5 | ======= 6 | 7 | ![](http://i.imgur.com/Ah5mP.png)   ![](http://i.imgur.com/KN4IB.png) 8 | 9 | ##Features 10 | 11 | - Universal device support (iPhone + iPad) 12 | - Universal orientation support (Portrait + Landscape) 13 | - Menus on the left and right side of the screen. 14 | - Storyboard support 15 | - View controller containment 16 | - Works with UINavigationController, UITabBarController, and other types of view controllers 17 | - Nice set of configuration options 18 | - Lightweight, simple and readable code. 19 | 20 | 21 | ##Installation 22 | 23 | ####CocoaPods 24 | Add `pod 'MFSideMenu'` to your Podfile. 25 | 26 | ####Manually 27 | Add the `MFSideMenu` folder to your project. Add QuartzCore to your project. MFSideMenu uses ARC. If you have a project that doesn't use ARC, just add the `-fobjc-arc` compiler flag to the MFSideMenu files. 28 | 29 | 30 | ##Usage 31 | 32 | ###Basic Setup 33 | 34 | In your app delegate:
35 | ```objective-c 36 | #import "MFSideMenu.h" 37 | 38 | MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController 39 | containerWithCenterViewController:centerViewController 40 | leftMenuViewController:leftMenuViewController 41 | rightMenuViewController:rightMenuViewController]; 42 | self.window.rootViewController = container; 43 | [self.window makeKeyAndVisible]; 44 | ``` 45 | 46 | ###Opening & Closing Menus 47 | 48 | ```objective-c 49 | // toggle the left side menu 50 | [self.menuContainerViewController toggleLeftSideMenuCompletion:^{}]; 51 | // toggle the right side menu 52 | [self.menuContainerViewController toggleRightSideMenuCompletion:^{}]; 53 | // close the side menu 54 | [self.menuContainerViewController setMenuState:MFSideMenuStateClosed completion:^{}]; 55 | // open the left side menu 56 | [self.menuContainerViewController setMenuState:MFSideMenuStateLeftMenuOpen completion:^{}]; 57 | // open the right side menu 58 | [self.menuContainerViewController setMenuState:MFSideMenuStateRightMenuOpen completion:^{}]; 59 | ``` 60 | 61 | ###Pan Modes 62 | 63 | You can specify which areas you want to allow pan gestures on: 64 | 65 | ```objective-c 66 | // enable panning on the center view controllers & the side menus (this is the default behavior): 67 | menuContainerViewController.panMode = MFSideMenuPanModeCenterViewController | MFSideMenuPanModeSideMenu; 68 | 69 | // disable panning on the side menus, only allow panning on the center view controller: 70 | menuContainerViewController.panMode = MFSideMenuPanModeCenterViewController; 71 | 72 | // disable all panning 73 | menuContainerViewController.panMode = MFSideMenuPanModeNone; 74 | ``` 75 | 76 | ###Panning Custom Views 77 | 78 | You can add panning to any view like so: 79 | 80 | ```objective-c 81 | [panView addGestureRecognizer:[self.menuContainerViewController panGestureRecognizer]]; 82 | ``` 83 | 84 | ###Listening for Menu Events 85 | 86 | You can listen for menu state event changes (i.e. menu will open, menu did open, etc.). See MFSideMenuContainerViewController.h for the different types of events. 87 | 88 | ```objective-c 89 | [[NSNotificationCenter defaultCenter] addObserver:self 90 | selector:@selector(menuStateEventOccurred:) 91 | name:MFSideMenuStateNotificationEvent 92 | object:nil]; 93 | - (void)menuStateEventOccurred:(NSNotification *)notification { 94 | MFSideMenuStateEvent event = [[[notification userInfo] objectForKey:@"eventType"] intValue]; 95 | MFSideMenuContainerViewController *containerViewController = notification.object; 96 | // ... 97 | } 98 | ``` 99 | 100 | ###Menu Slide Animation 101 | 102 | With this option enabled, the side menus will slide in & out with the center view controller. This effect is similar to the Wunderlist side menu. 103 | 104 | ```objective-c 105 | // enable the menu slide animation 106 | [menuContainerViewController setMenuSlideAnimationEnabled:YES]; 107 | 108 | // control the exaggeration of the menu slide animation 109 | [menuContainerViewController setMenuSlideAnimationFactor:3.0f]; 110 | ``` 111 | 112 | ###Shadow 113 | 114 | MFSideMenu gives you the option to show a shadow between the center view controller & the side menus. 115 | 116 | ```objective-c 117 | // enable/disable the shadow 118 | [menuContainerViewController.shadow setEnabled:YES]; 119 | 120 | // set the radius of the shadow 121 | [menuContainerViewController.shadow setRadius:10.0f]; 122 | 123 | // set the color of the shadow 124 | [menuContainerViewController.shadow setColor:[UIColor blackColor]]; 125 | 126 | // set the opacity of the shadow 127 | [menuContainerViewController.shadow setOpacity:0.75f]; 128 | 129 | ``` 130 | 131 | ##Contact 132 | 133 | [@mike_frederick](http://twitter.com/mike_frederick) 134 | --------------------------------------------------------------------------------