├── Demo ├── Demo │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── Default.png │ ├── Default@2x.png │ ├── cellBg@2x.png │ ├── Default-568h@2x.png │ ├── cellBgSelected@2x.png │ ├── DemoRootViewController.h │ ├── DemoMenuController.h │ ├── Demo-Prefix.pch │ ├── main.m │ ├── AppDelegate.h │ ├── DemoRootViewController.m │ ├── Demo-Info.plist │ ├── AppDelegate.m │ └── DemoMenuController.m ├── Resources │ └── cellBg.psd └── Demo.xcodeproj │ └── project.pbxproj ├── Screenshots ├── 1.PNG ├── 2.PNG ├── 3.PNG ├── 4.PNG ├── demo.gif └── demo.png ├── .gitmodules ├── LICENSE.md ├── PaperFoldMenuController ├── PaperFoldMenuControllerDelegate.h ├── PaperFoldMenuController.h └── PaperFoldMenuController.m └── README.md /Demo/Demo/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Screenshots/1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Screenshots/1.PNG -------------------------------------------------------------------------------- /Screenshots/2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Screenshots/2.PNG -------------------------------------------------------------------------------- /Screenshots/3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Screenshots/3.PNG -------------------------------------------------------------------------------- /Screenshots/4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Screenshots/4.PNG -------------------------------------------------------------------------------- /Screenshots/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Screenshots/demo.gif -------------------------------------------------------------------------------- /Screenshots/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Screenshots/demo.png -------------------------------------------------------------------------------- /Demo/Demo/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Demo/Demo/Default.png -------------------------------------------------------------------------------- /Demo/Demo/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Demo/Demo/Default@2x.png -------------------------------------------------------------------------------- /Demo/Demo/cellBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Demo/Demo/cellBg@2x.png -------------------------------------------------------------------------------- /Demo/Resources/cellBg.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Demo/Resources/cellBg.psd -------------------------------------------------------------------------------- /Demo/Demo/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Demo/Demo/Default-568h@2x.png -------------------------------------------------------------------------------- /Demo/Demo/cellBgSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/PaperFoldMenuController/HEAD/Demo/Demo/cellBgSelected@2x.png -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "PaperFoldMenuController/PaperFold"] 2 | path = PaperFoldMenuController/PaperFold 3 | url = https://github.com/honcheng/PaperFold-for-iOS.git 4 | -------------------------------------------------------------------------------- /Demo/Demo/DemoRootViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoRootViewController.h 3 | // Demo 4 | // 5 | // Created by honcheng on 27/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DemoRootViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Demo/Demo/DemoMenuController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoMenuController.h 3 | // Demo 4 | // 5 | // Created by honcheng on 26/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PaperFoldMenuController.h" 11 | 12 | @interface DemoMenuController : PaperFoldMenuController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Demo/Demo/Demo-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Demo' target in the 'Demo' 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 | -------------------------------------------------------------------------------- /Demo/Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Demo 4 | // 5 | // Created by honcheng on 26/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. 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 | -------------------------------------------------------------------------------- /Demo/Demo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Demo 4 | // 5 | // Created by honcheng on 26/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "DemoMenuController.h" 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (strong, nonatomic) UIWindow *window; 15 | @property (nonatomic, strong) DemoMenuController *menuController; 16 | @end 17 | -------------------------------------------------------------------------------- /Demo/Demo/DemoRootViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DemoRootViewController.m 3 | // Demo 4 | // 5 | // Created by honcheng on 27/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. All rights reserved. 7 | // 8 | 9 | #import "DemoRootViewController.h" 10 | 11 | @interface DemoRootViewController () 12 | 13 | @end 14 | 15 | @implementation DemoRootViewController 16 | 17 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 18 | { 19 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 20 | if (self) { 21 | // Custom initialization 22 | } 23 | return self; 24 | } 25 | 26 | - (void)viewDidLoad 27 | { 28 | [super viewDidLoad]; 29 | // Do any additional setup after loading the view. 30 | } 31 | 32 | - (void)didReceiveMemoryWarning 33 | { 34 | [super didReceiveMemoryWarning]; 35 | // Dispose of any resources that can be recreated. 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Demo/Demo/Demo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.honcheng.${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 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Muh Hon Cheng 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject 9 | to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 15 | WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR 18 | PURPOSE AND NONINFRINGEMENT. IN NO EVENT 19 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR 23 | IN CONNECTION WITH THE SOFTWARE OR 24 | THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | 26 | @author Muh Hon Cheng 27 | @copyright 2012 Muh Hon Cheng -------------------------------------------------------------------------------- /Demo/Demo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // Demo 4 | // 5 | // Created by honcheng on 26/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "DemoMenuController.h" 11 | #import "DemoRootViewController.h" 12 | 13 | @implementation AppDelegate 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 18 | 19 | _menuController = [[DemoMenuController alloc] initWithMenuWidth:250.0 numberOfFolds:3]; 20 | [_menuController setDelegate:self]; 21 | [self.window setRootViewController:_menuController]; 22 | 23 | NSMutableArray *viewControllers = [NSMutableArray array]; 24 | 25 | for (int i=0; i<8; i++) 26 | { 27 | DemoRootViewController *rootViewController = [[DemoRootViewController alloc] init]; 28 | [rootViewController setTitle:[NSString stringWithFormat:@"Root VC %i", i+1]]; 29 | UINavigationController *rootNavController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 30 | [viewControllers addObject:rootNavController]; 31 | } 32 | 33 | 34 | [_menuController setViewControllers:viewControllers]; 35 | 36 | self.window.backgroundColor = [UIColor whiteColor]; 37 | [self.window makeKeyAndVisible]; 38 | return YES; 39 | } 40 | 41 | - (void)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController didSelectViewController:(UIViewController *)viewController 42 | { 43 | 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /PaperFoldMenuController/PaperFoldMenuControllerDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2012 Muh Hon Cheng 3 | * Created by honcheng on 26/10/12. 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining 6 | * a copy of this software and associated documentation files (the 7 | * "Software"), to deal in the Software without restriction, including 8 | * without limitation the rights to use, copy, modify, merge, publish, 9 | * distribute, sublicense, and/or sell copies of the Software, and to 10 | * permit persons to whom the Software is furnished to do so, subject 11 | * to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be 14 | * included in all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 17 | * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 18 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR 20 | * PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 22 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR 25 | * IN CONNECTION WITH THE SOFTWARE OR 26 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | * 28 | * @author Muh Hon Cheng 29 | * @copyright 2012 Muh Hon Cheng 30 | * @version 31 | * 32 | */ 33 | 34 | #import 35 | 36 | @class PaperFoldMenuController; 37 | 38 | @protocol PaperFoldMenuControllerDelegate 39 | @optional 40 | - (BOOL)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController shouldSelectViewController:(UIViewController *)viewController; 41 | - (BOOL)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController shouldFoldMenuToRevealViewController:(UIViewController *)viewController; 42 | - (void)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController didSelectViewController:(UIViewController *)viewController; 43 | @end 44 | -------------------------------------------------------------------------------- /Demo/Demo/DemoMenuController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DemoMenuController.m 3 | // Demo 4 | // 5 | // Created by honcheng on 26/10/12. 6 | // Copyright (c) 2012 Hon Cheng Muh. All rights reserved. 7 | // 8 | 9 | #import "DemoMenuController.h" 10 | 11 | @interface DemoMenuController () 12 | 13 | @end 14 | 15 | @implementation DemoMenuController 16 | 17 | - (id)initWithMenuWidth:(float)menuWidth numberOfFolds:(int)numberOfFolds 18 | { 19 | self = [super initWithMenuWidth:menuWidth numberOfFolds:numberOfFolds]; 20 | if (self) 21 | { 22 | } 23 | return self; 24 | } 25 | 26 | - (void)viewDidLoad { 27 | [super viewDidLoad]; 28 | 29 | [self setOnlyAllowEdgeDrag:NO]; 30 | 31 | UIView *tableBgView = [[UIView alloc] initWithFrame:self.view.bounds]; 32 | [tableBgView setBackgroundColor:[UIColor colorWithRed:0.170 green:0.166 blue:0.175 alpha:1.000]]; 33 | [self.menuTableView setBackgroundView:tableBgView]; 34 | [self.menuTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 35 | 36 | [self performSelector:@selector(reloadMenu)]; 37 | } 38 | 39 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 40 | { 41 | return 50; 42 | } 43 | 44 | /** 45 | * Override the method to customize cells 46 | */ 47 | - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 48 | { 49 | if (tableView==self.menuTableView) 50 | { 51 | static NSString *identifier = @"identifier"; 52 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 53 | if (!cell) 54 | { 55 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 56 | [[cell textLabel] setTextColor:[UIColor whiteColor]]; 57 | [[cell textLabel] setHighlightedTextColor:[UIColor blackColor]]; 58 | [[cell textLabel] setBackgroundColor:[UIColor clearColor]]; 59 | 60 | UIImageView *bgView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"cellBg.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:20]]; 61 | [cell setBackgroundView:bgView]; 62 | UIImageView *sBgView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"cellBgSelected.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:20]]; 63 | [cell setSelectedBackgroundView:sBgView]; 64 | 65 | } 66 | 67 | UIViewController *viewController = self.viewControllers[indexPath.row]; 68 | [cell.textLabel setText:viewController.title]; 69 | 70 | if (indexPath.row==self.selectedIndex) 71 | { 72 | [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 73 | } 74 | 75 | return cell; 76 | } 77 | else return nil; 78 | } 79 | 80 | 81 | @end 82 | -------------------------------------------------------------------------------- /PaperFoldMenuController/PaperFoldMenuController.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2012 Muh Hon Cheng 3 | * Created by honcheng on 26/10/12. 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining 6 | * a copy of this software and associated documentation files (the 7 | * "Software"), to deal in the Software without restriction, including 8 | * without limitation the rights to use, copy, modify, merge, publish, 9 | * distribute, sublicense, and/or sell copies of the Software, and to 10 | * permit persons to whom the Software is furnished to do so, subject 11 | * to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be 14 | * included in all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 17 | * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 18 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR 20 | * PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 22 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR 25 | * IN CONNECTION WITH THE SOFTWARE OR 26 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | * 28 | * @author Muh Hon Cheng 29 | * @copyright 2012 Muh Hon Cheng 30 | * @version 31 | * 32 | */ 33 | 34 | #import 35 | #import "PaperFoldView.h" 36 | #import "PaperFoldMenuControllerDelegate.h" 37 | #import "ShadowView.h" 38 | 39 | @interface PaperFoldMenuController : UIViewController 40 | @property (nonatomic, weak) PaperFoldView *paperFoldView; 41 | @property (nonatomic, strong) NSMutableArray *viewControllers; 42 | @property (nonatomic, weak) UITableView *menuTableView; 43 | @property (nonatomic, weak) UIView *contentView; 44 | @property (nonatomic, weak) ShadowView *menuTableViewSideShadowView; 45 | @property (nonatomic, weak) id delegate; 46 | @property (nonatomic, assign) BOOL onlyAllowEdgeDrag; 47 | /** 48 | * Set and return the current view controller; 49 | */ 50 | @property (nonatomic, strong) UIViewController *selectedViewController; 51 | /** 52 | * Set and return the index of the current view controller 53 | */ 54 | @property (nonatomic, assign) NSUInteger selectedIndex; 55 | @property (nonatomic, assign, readonly) float menuWidth; 56 | @property (nonatomic, assign, readonly) int numberOfFolds; 57 | /** 58 | * This method initialize the view controller with 59 | * the width of the menu table view on the left 60 | */ 61 | - (id)initWithMenuWidth:(float)menuWidth numberOfFolds:(int)numberOfFolds; 62 | /** 63 | * This method fold/unfolds to hide/reveal the menuTableView 64 | * @param show A boolean value to indicate if the menu should be shown or hidden 65 | * @param animated A boolean value to indicate if the folding/unfolding should be animated 66 | */ 67 | - (void)showMenu:(BOOL)show animated:(BOOL)animated; 68 | @end 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PaperFoldMenuController 2 | ======================= 3 | 4 | PaperFoldMenuController is a UITabBarController replacement, but displays the view controllers in a table view on the left side of the screen. This table view is shown/hidden using [PaperFold-for-iOS](https://github.com/honcheng/PaperFold-for-iOS). Selecting from the menu on the left changes the view controller on the right. PaperFoldMenuController uses view controller containment. 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Usage 13 | ----- 14 | 15 | #PaperFoldMenuController 16 | 17 | ##initWithMenuWidth:numberOfFolds 18 | Initialize PaperFoldMenuController 19 | 20 | - (id)initWithMenuWidth:(float)menuWidth numberOfFolds:(int)numberOfFolds 21 | 22 | ####Parameters 23 | #####menuWidth 24 | This value specifies the width of the table view in the left menu 25 | #####numberOfFolds 26 | This value specifies the number of folds in the menu table view 27 | 28 | ##setViewControllers: 29 | Sets the root view controllers. Title for each view controllers appears in the menu table view 30 | 31 | - (void)setViewControllers:(NSMutableArray *)viewControllers 32 | 33 | ####Parameters 34 | #####viewControllers 35 | The array of custom view controllers to display on screen. The title of each view controllers are shown in the menu table view on the left. 36 | 37 | ##setSelectedIndex: 38 | Sets the current root view controller in contentView by index 39 | 40 | - (void)setSelectedIndex:(NSUInteger)selectedIndex 41 | 42 | ####Parameters 43 | #####selectedIndex 44 | An integer value which is the index of the root view controller in the viewControllers array. 45 | 46 | ##showMenu:animated: 47 | Show or hide the menu table view. 48 | 49 | - (void)showMenu:(BOOL)show animated:(BOOL)animated 50 | 51 | ####Parameters 52 | #####show 53 | A boolean value to indicate if the menu should be shown or hidden 54 | #####animated 55 | A boolean value to indicate if the folding/unfolding should be animated 56 | #####Discussion 57 | This method is automatically called with show=YES and animated=YES when a cell in menu table view is selected. 58 | 59 | #PaperFoldMenuControllerDelegate 60 | 61 | ##paperFoldMenuController:shouldSelectViewController: 62 | Ask the delegate whether the specified view controller should be made active 63 | 64 | - (BOOL)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController shouldSelectViewController:(UIViewController *)viewController 65 | 66 | ####Parameters 67 | #####paperFoldMenuController 68 | The paperfold menu controller containing the viewController. 69 | #####viewController 70 | The view controller selected in the menu 71 | #####Discussion 72 | The paperfold menu controller calls this method in response to the user tapping on the left menu. You can use this method to dynamically decide whether the view controller should be made active. 73 | 74 | ##paperFoldMenuController:didSelectViewController: 75 | The paperfold menu controller calls this method in response to the user tapping the left menu, after the viewController is made active. 76 | 77 | - (void)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController didSelectViewController:(UIViewController *)viewController 78 | 79 | ####Parameters 80 | #####paperFoldMenuController 81 | The paperfold menu controller containing the viewController. 82 | #####viewController 83 | The view controller selected in the menu 84 | 85 | 86 | ##paperFoldMenuController:shouldFoldMenuToRevealViewController: 87 | Ask the delegate if the menu table view should be folded to reveal the selected view controller 88 | 89 | - (BOOL)paperFoldMenuController:(PaperFoldMenuController *)paperFoldMenuController shouldFoldMenuToRevealViewController:(UIViewController *)viewController; 90 | 91 | ####Parameters 92 | #####paperFoldMenuController 93 | The paperfold menu controller containing the viewController. 94 | #####viewController 95 | The view controller selected in the menu 96 | 97 | 98 | Requirements 99 | --- 100 | 101 | This project uses ARC. If you are not using ARC in your project, add '-fobjc-arc' as a compiler flag for all the files in this project. 102 | 103 | XCode 4.4 is required for auto-synthesis. 104 | 105 | iOS 5.0 and above is required because the project uses view controller containment. 106 | 107 | Contact 108 | ------ 109 | 110 | [twitter.com/honcheng](http://twitter.com/honcheng) 111 | [honcheng.com](http://honcheng.com) 112 | 113 | ![](http://www.cocoacontrols.com/analytics/honcheng/paperfoldmenucontroller.png) 114 | -------------------------------------------------------------------------------- /PaperFoldMenuController/PaperFoldMenuController.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2012 Muh Hon Cheng 3 | * Created by honcheng on 26/10/12. 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining 6 | * a copy of this software and associated documentation files (the 7 | * "Software"), to deal in the Software without restriction, including 8 | * without limitation the rights to use, copy, modify, merge, publish, 9 | * distribute, sublicense, and/or sell copies of the Software, and to 10 | * permit persons to whom the Software is furnished to do so, subject 11 | * to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be 14 | * included in all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 17 | * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 18 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR 20 | * PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 22 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR 25 | * IN CONNECTION WITH THE SOFTWARE OR 26 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | * 28 | * @author Muh Hon Cheng 29 | * @copyright 2012 Muh Hon Cheng 30 | * @version 31 | * 32 | */ 33 | 34 | #import "PaperFoldMenuController.h" 35 | 36 | @interface PaperFoldMenuController () 37 | /** 38 | * A UIView with shadow at joint between the menu and content view 39 | */ 40 | @property (nonatomic, assign) float menuWidth; 41 | @property (nonatomic, assign) int numberOfFolds; 42 | @property (nonatomic, strong) NSMutableArray *viewDidLoadBlocks; 43 | /** 44 | * This method reloads the menu on the left 45 | * and refresh the screenshot of the menu used in 46 | * PaperFold 47 | */ 48 | - (void)reloadMenu; 49 | @end 50 | 51 | @implementation PaperFoldMenuController 52 | 53 | - (NSMutableArray *)viewDidLoadBlocks { 54 | if (_viewDidLoadBlocks == nil) { 55 | self.viewDidLoadBlocks = [[NSMutableArray alloc] init]; 56 | } 57 | return _viewDidLoadBlocks; 58 | } 59 | 60 | + (BOOL)automaticallyNotifiesObserversOfSelectedViewController 61 | { 62 | return NO; 63 | } 64 | 65 | + (NSSet *)keyPathsForValuesAffectingSelectedViewController 66 | { 67 | return [NSSet setWithObjects:@"selectedIndex", nil]; 68 | } 69 | 70 | - (UIViewController *)selectedViewController 71 | { 72 | if (self.selectedIndex == NSNotFound) 73 | { 74 | return nil; 75 | } 76 | else 77 | { 78 | return self.viewControllers[self.selectedIndex]; 79 | } 80 | } 81 | 82 | - (void)setSelectedViewController:(UIViewController *)theSelectedViewController 83 | { 84 | NSUInteger theSelectedIndex = [self.viewControllers indexOfObject:theSelectedViewController]; 85 | 86 | if (theSelectedIndex == NSNotFound) 87 | { 88 | [NSException raise:NSInternalInconsistencyException format:@"Could not selected view controller because it is not registered.\n%@", theSelectedViewController]; 89 | return; 90 | } 91 | 92 | self.selectedIndex = theSelectedIndex; 93 | } 94 | 95 | + (BOOL)automaticallyNotifiesObserversOfSelectedIndex { 96 | return NO; 97 | } 98 | 99 | - (void)setSelectedIndex:(NSUInteger)theSelectedIndex 100 | { 101 | if (!self.isViewLoaded) 102 | { 103 | __weak __typeof(*&self) theWeakSelf = self; 104 | [self.viewDidLoadBlocks addObject:[^{ 105 | __strong __typeof(*&self) theStrongSelf = theWeakSelf; 106 | if (theStrongSelf == nil) { 107 | return; 108 | } 109 | theStrongSelf.selectedIndex = theSelectedIndex; 110 | } copy]]; 111 | } 112 | else 113 | { 114 | NSUInteger theOldSelectedIndex = self.selectedIndex; 115 | NSUInteger theNewSelectedIndex = theSelectedIndex; 116 | 117 | if (theOldSelectedIndex == theNewSelectedIndex) { 118 | return; 119 | } 120 | 121 | [self willChangeValueForKey:@"selectedIndex"]; 122 | 123 | if (theOldSelectedIndex != NSNotFound) 124 | { 125 | UIViewController *theOldViewController = self.viewControllers[theOldSelectedIndex]; 126 | [theOldViewController willMoveToParentViewController:nil]; 127 | [theOldViewController.view removeFromSuperview]; 128 | [theOldViewController removeFromParentViewController]; 129 | 130 | [self.menuTableView deselectRowAtIndexPath:[NSIndexPath indexPathForRow:theOldSelectedIndex inSection:0] animated:YES]; 131 | } 132 | 133 | _selectedIndex = theNewSelectedIndex; 134 | 135 | if (theNewSelectedIndex != NSNotFound) 136 | { 137 | UIViewController *theNewViewController = self.viewControllers[theNewSelectedIndex]; 138 | theNewViewController.view.frame = self.contentView.bounds; 139 | [self addChildViewController:theNewViewController]; 140 | [self.contentView addSubview:theNewViewController.view]; 141 | [theNewViewController didMoveToParentViewController:self]; 142 | 143 | [self.menuTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:theNewSelectedIndex inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone]; 144 | } 145 | 146 | [self didChangeValueForKey:@"selectedIndex"]; 147 | 148 | if (self.paperFoldView.state != PaperFoldStateLeftUnfolded) 149 | { 150 | [self reloadMenu]; 151 | } 152 | } 153 | } 154 | 155 | - (void)commonInit { 156 | _selectedIndex = NSNotFound; 157 | } 158 | 159 | - (id)initWithMenuWidth:(float)menuWidth numberOfFolds:(int)numberOfFolds 160 | { 161 | self = [self initWithNibName:nil bundle:nil]; 162 | if (self) 163 | { 164 | self.menuWidth = menuWidth; 165 | self.numberOfFolds = numberOfFolds; 166 | } 167 | return self; 168 | } 169 | 170 | - (id)initWithNibName:(NSString *)theNibNameOrNil bundle:(NSBundle *)theNibBundleOrNil { 171 | self = [super initWithNibName:theNibNameOrNil bundle:theNibBundleOrNil]; 172 | if (self) 173 | { 174 | [self commonInit]; 175 | } 176 | return self; 177 | } 178 | 179 | - (id)initWithCoder:(NSCoder *)aDecoder { 180 | self = [super initWithCoder:aDecoder]; 181 | if (self) 182 | { 183 | [self commonInit]; 184 | } 185 | return self; 186 | } 187 | 188 | - (void)viewDidLoad 189 | { 190 | [super viewDidLoad]; 191 | 192 | PaperFoldView *paperFoldView = [[PaperFoldView alloc] initWithFrame:CGRectMake(0, 0, [self.view bounds].size.width, [self.view bounds].size.height)]; 193 | [paperFoldView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 194 | [paperFoldView setDelegate:self]; 195 | [paperFoldView setUseOptimizedScreenshot:NO]; 196 | [self.view addSubview:paperFoldView]; 197 | self.paperFoldView = paperFoldView; 198 | 199 | UIView *contentView = [[UIView alloc] initWithFrame:_paperFoldView.frame]; 200 | [contentView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 201 | [self.paperFoldView setCenterContentView:contentView]; 202 | self.contentView = contentView; 203 | 204 | UITableView *menuTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.menuWidth, [self.view bounds].size.height)]; 205 | [self.paperFoldView setLeftFoldContentView:menuTableView foldCount:self.numberOfFolds pullFactor:0.9]; 206 | [menuTableView setDelegate:self]; 207 | [menuTableView setDataSource:self]; 208 | menuTableView.scrollsToTop = !(self.paperFoldView.state == PaperFoldStateDefault); 209 | self.menuTableView = menuTableView; 210 | 211 | ShadowView *menuTableViewSideShadowView = [[ShadowView alloc] initWithFrame:CGRectMake(_menuTableView.frame.size.width-2,0,2,[self.view bounds].size.height) foldDirection:FoldDirectionHorizontalLeftToRight]; 212 | [menuTableViewSideShadowView setColorArrays:@[[UIColor clearColor],[UIColor colorWithWhite:0 alpha:0.2]]]; 213 | /** 214 | * added to the leftFoldView instead of leftFoldView.contentView bec 215 | * so that the shadow does not appear while folding 216 | */ 217 | [self.paperFoldView.leftFoldView addSubview:menuTableViewSideShadowView]; 218 | self.menuTableViewSideShadowView = menuTableViewSideShadowView; 219 | 220 | for (void (^theBlock)(void) in self.viewDidLoadBlocks) { 221 | theBlock(); 222 | } 223 | self.viewDidLoadBlocks = nil; 224 | } 225 | 226 | - (void)setViewControllers:(NSMutableArray *)viewControllers 227 | { 228 | self.selectedIndex = NSNotFound; // Forces any child view controller to be removed. 229 | _viewControllers = viewControllers; 230 | if ([_viewControllers count]>0) [self setSelectedIndex:0]; 231 | [self reloadMenu]; 232 | } 233 | 234 | - (void)addViewController:(UIViewController*)viewController; 235 | { 236 | if (!_viewControllers) _viewControllers = [NSMutableArray array]; 237 | [self.viewControllers addObject:viewController]; 238 | [self reloadMenu]; 239 | } 240 | 241 | - (void)reloadMenu 242 | { 243 | [self.menuTableView reloadData]; 244 | [self.paperFoldView.leftFoldView.contentViewHolder setHidden:NO]; 245 | [self.paperFoldView.leftFoldView drawScreenshotOnFolds]; 246 | [self.paperFoldView.leftFoldView.contentViewHolder setHidden:YES]; 247 | } 248 | 249 | #pragma mark table view delegates and datasource 250 | 251 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 252 | { 253 | if (tableView==self.menuTableView) return [self.viewControllers count]; 254 | else return 0; 255 | } 256 | 257 | - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 258 | { 259 | if (tableView==self.menuTableView) 260 | { 261 | static NSString *identifier = @"identifier"; 262 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 263 | if (!cell) 264 | { 265 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 266 | } 267 | 268 | UIViewController *viewController = self.viewControllers[indexPath.row]; 269 | [cell.textLabel setText:viewController.title]; 270 | 271 | if (indexPath.row==self.selectedIndex) 272 | { 273 | [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 274 | } 275 | 276 | return cell; 277 | } 278 | else return nil; 279 | } 280 | 281 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 282 | { 283 | if (tableView==self.menuTableView) 284 | { 285 | BOOL shouldSelect = YES; 286 | if ([self.delegate respondsToSelector:@selector(paperFoldMenuController:shouldSelectViewController:)]) 287 | { 288 | shouldSelect = [self.delegate paperFoldMenuController:self shouldSelectViewController:self.viewControllers[indexPath.row]]; 289 | } 290 | if (shouldSelect) 291 | { 292 | [self setSelectedIndex:indexPath.row]; 293 | if ([self.delegate respondsToSelector:@selector(paperFoldMenuController:didSelectViewController:)]) 294 | { 295 | [self.delegate paperFoldMenuController:self didSelectViewController:self.selectedViewController]; 296 | } 297 | 298 | BOOL shouldFold = YES; 299 | if ([self.delegate respondsToSelector:@selector(paperFoldMenuController:shouldFoldMenuToRevealViewController:)]) 300 | { 301 | shouldFold = [self.delegate paperFoldMenuController:self shouldFoldMenuToRevealViewController:self.selectedViewController]; 302 | } 303 | if (shouldFold) 304 | { 305 | [self showMenu:NO animated:YES]; 306 | } 307 | } 308 | } 309 | } 310 | 311 | - (void)showMenu:(BOOL)show animated:(BOOL)animated 312 | { 313 | if (show) 314 | { 315 | [self.paperFoldView setPaperFoldState:PaperFoldStateLeftUnfolded animated:animated]; 316 | } 317 | else 318 | { 319 | [self.paperFoldView setPaperFoldState:PaperFoldStateDefault animated:animated]; 320 | } 321 | } 322 | 323 | - (void)setOnlyAllowEdgeDrag:(BOOL)onlyAllowEdgeDrag 324 | { 325 | [self.paperFoldView setEnableHorizontalEdgeDragging:onlyAllowEdgeDrag]; 326 | } 327 | 328 | #pragma mark - PaperFoldViewDelegate methods 329 | 330 | - (void)paperFoldView:(id)thePaperFoldView didFoldAutomatically:(BOOL)theAutomated toState:(PaperFoldState)thePaperFoldState { 331 | BOOL thePaperFoldViewDidFold = (thePaperFoldState == PaperFoldStateDefault); 332 | self.menuTableView.scrollsToTop = !thePaperFoldViewDidFold; 333 | } 334 | 335 | @end 336 | -------------------------------------------------------------------------------- /Demo/Demo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F8938458163AD2BE0085C3BB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8938457163AD2BE0085C3BB /* UIKit.framework */; }; 11 | F893845A163AD2BE0085C3BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8938459163AD2BE0085C3BB /* Foundation.framework */; }; 12 | F893845C163AD2BE0085C3BB /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F893845B163AD2BE0085C3BB /* CoreGraphics.framework */; }; 13 | F8938462163AD2BE0085C3BB /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F8938460163AD2BE0085C3BB /* InfoPlist.strings */; }; 14 | F8938464163AD2BE0085C3BB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8938463163AD2BE0085C3BB /* main.m */; }; 15 | F8938468163AD2BE0085C3BB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8938467163AD2BE0085C3BB /* AppDelegate.m */; }; 16 | F893846A163AD2BE0085C3BB /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = F8938469163AD2BE0085C3BB /* Default.png */; }; 17 | F893846C163AD2BE0085C3BB /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F893846B163AD2BE0085C3BB /* Default@2x.png */; }; 18 | F893846E163AD2BE0085C3BB /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F893846D163AD2BE0085C3BB /* Default-568h@2x.png */; }; 19 | F89384C6163AD3BC0085C3BB /* PaperFoldMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384C5163AD3BC0085C3BB /* PaperFoldMenuController.m */; }; 20 | F8938502163AD49E0085C3BB /* FacingView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384ED163AD49E0085C3BB /* FacingView.m */; }; 21 | F8938503163AD49E0085C3BB /* FoldView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384EF163AD49E0085C3BB /* FoldView.m */; }; 22 | F8938504163AD49E0085C3BB /* MultiFoldView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384F1163AD49E0085C3BB /* MultiFoldView.m */; }; 23 | F8938505163AD49E0085C3BB /* PaperFoldNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384F3163AD49E0085C3BB /* PaperFoldNavigationController.m */; }; 24 | F8938506163AD49E0085C3BB /* PaperFoldResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F89384F4163AD49E0085C3BB /* PaperFoldResources.bundle */; }; 25 | F8938507163AD49E0085C3BB /* PaperFoldSwipeHintView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384F6163AD49E0085C3BB /* PaperFoldSwipeHintView.m */; }; 26 | F8938508163AD49E0085C3BB /* PaperFoldView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384F8163AD49E0085C3BB /* PaperFoldView.m */; }; 27 | F8938509163AD49E0085C3BB /* swipe_guide.psd in Resources */ = {isa = PBXBuildFile; fileRef = F89384FA163AD49E0085C3BB /* swipe_guide.psd */; }; 28 | F893850A163AD49E0085C3BB /* swipe_guide2.psd in Resources */ = {isa = PBXBuildFile; fileRef = F89384FB163AD49E0085C3BB /* swipe_guide2.psd */; }; 29 | F893850B163AD49E0085C3BB /* ShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384FD163AD49E0085C3BB /* ShadowView.m */; }; 30 | F893850C163AD49E0085C3BB /* TouchThroughUIView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89384FF163AD49E0085C3BB /* TouchThroughUIView.m */; }; 31 | F893850D163AD49E0085C3BB /* UIView+Screenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = F8938501163AD49E0085C3BB /* UIView+Screenshot.m */; }; 32 | F8938535163AD6FA0085C3BB /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8938534163AD6FA0085C3BB /* QuartzCore.framework */; }; 33 | F893853C163AD8680085C3BB /* DemoMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = F893853B163AD8680085C3BB /* DemoMenuController.m */; }; 34 | F8C000CF163B67DF00654C1E /* cellBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8C000CE163B67DF00654C1E /* cellBg@2x.png */; }; 35 | F8C000D3163B691E00654C1E /* cellBgSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8C000D2163B691E00654C1E /* cellBgSelected@2x.png */; }; 36 | F8C000D6163B6B7300654C1E /* DemoRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C000D5163B6B7300654C1E /* DemoRootViewController.m */; }; 37 | /* End PBXBuildFile section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | F8938453163AD2BE0085C3BB /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | F8938457163AD2BE0085C3BB /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 42 | F8938459163AD2BE0085C3BB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 43 | F893845B163AD2BE0085C3BB /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 44 | F893845F163AD2BE0085C3BB /* Demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Demo-Info.plist"; sourceTree = ""; }; 45 | F8938461163AD2BE0085C3BB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 46 | F8938463163AD2BE0085C3BB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | F8938465163AD2BE0085C3BB /* Demo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Demo-Prefix.pch"; sourceTree = ""; }; 48 | F8938466163AD2BE0085C3BB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 49 | F8938467163AD2BE0085C3BB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 50 | F8938469163AD2BE0085C3BB /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 51 | F893846B163AD2BE0085C3BB /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 52 | F893846D163AD2BE0085C3BB /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 53 | F89384C4163AD3BC0085C3BB /* PaperFoldMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PaperFoldMenuController.h; path = ../PaperFoldMenuController/PaperFoldMenuController.h; sourceTree = ""; }; 54 | F89384C5163AD3BC0085C3BB /* PaperFoldMenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PaperFoldMenuController.m; path = ../PaperFoldMenuController/PaperFoldMenuController.m; sourceTree = ""; }; 55 | F89384EC163AD49E0085C3BB /* FacingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacingView.h; sourceTree = ""; }; 56 | F89384ED163AD49E0085C3BB /* FacingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacingView.m; sourceTree = ""; }; 57 | F89384EE163AD49E0085C3BB /* FoldView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoldView.h; sourceTree = ""; }; 58 | F89384EF163AD49E0085C3BB /* FoldView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoldView.m; sourceTree = ""; }; 59 | F89384F0163AD49E0085C3BB /* MultiFoldView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiFoldView.h; sourceTree = ""; }; 60 | F89384F1163AD49E0085C3BB /* MultiFoldView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiFoldView.m; sourceTree = ""; }; 61 | F89384F2163AD49E0085C3BB /* PaperFoldNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaperFoldNavigationController.h; sourceTree = ""; }; 62 | F89384F3163AD49E0085C3BB /* PaperFoldNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaperFoldNavigationController.m; sourceTree = ""; }; 63 | F89384F4163AD49E0085C3BB /* PaperFoldResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = PaperFoldResources.bundle; sourceTree = ""; }; 64 | F89384F5163AD49E0085C3BB /* PaperFoldSwipeHintView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaperFoldSwipeHintView.h; sourceTree = ""; }; 65 | F89384F6163AD49E0085C3BB /* PaperFoldSwipeHintView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaperFoldSwipeHintView.m; sourceTree = ""; }; 66 | F89384F7163AD49E0085C3BB /* PaperFoldView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaperFoldView.h; sourceTree = ""; }; 67 | F89384F8163AD49E0085C3BB /* PaperFoldView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaperFoldView.m; sourceTree = ""; }; 68 | F89384FA163AD49E0085C3BB /* swipe_guide.psd */ = {isa = PBXFileReference; lastKnownFileType = file; path = swipe_guide.psd; sourceTree = ""; }; 69 | F89384FB163AD49E0085C3BB /* swipe_guide2.psd */ = {isa = PBXFileReference; lastKnownFileType = file; path = swipe_guide2.psd; sourceTree = ""; }; 70 | F89384FC163AD49E0085C3BB /* ShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShadowView.h; sourceTree = ""; }; 71 | F89384FD163AD49E0085C3BB /* ShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShadowView.m; sourceTree = ""; }; 72 | F89384FE163AD49E0085C3BB /* TouchThroughUIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchThroughUIView.h; sourceTree = ""; }; 73 | F89384FF163AD49E0085C3BB /* TouchThroughUIView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchThroughUIView.m; sourceTree = ""; }; 74 | F8938500163AD49E0085C3BB /* UIView+Screenshot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Screenshot.h"; sourceTree = ""; }; 75 | F8938501163AD49E0085C3BB /* UIView+Screenshot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Screenshot.m"; sourceTree = ""; }; 76 | F8938534163AD6FA0085C3BB /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 77 | F893853A163AD8680085C3BB /* DemoMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoMenuController.h; sourceTree = ""; }; 78 | F893853B163AD8680085C3BB /* DemoMenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoMenuController.m; sourceTree = ""; }; 79 | F8938557163ADFE40085C3BB /* PaperFoldMenuControllerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PaperFoldMenuControllerDelegate.h; path = ../PaperFoldMenuController/PaperFoldMenuControllerDelegate.h; sourceTree = ""; }; 80 | F8C000CE163B67DF00654C1E /* cellBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cellBg@2x.png"; sourceTree = ""; }; 81 | F8C000D2163B691E00654C1E /* cellBgSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cellBgSelected@2x.png"; sourceTree = ""; }; 82 | F8C000D4163B6B7300654C1E /* DemoRootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoRootViewController.h; sourceTree = ""; }; 83 | F8C000D5163B6B7300654C1E /* DemoRootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoRootViewController.m; sourceTree = ""; }; 84 | /* End PBXFileReference section */ 85 | 86 | /* Begin PBXFrameworksBuildPhase section */ 87 | F8938450163AD2BE0085C3BB /* Frameworks */ = { 88 | isa = PBXFrameworksBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | F8938535163AD6FA0085C3BB /* QuartzCore.framework in Frameworks */, 92 | F8938458163AD2BE0085C3BB /* UIKit.framework in Frameworks */, 93 | F893845A163AD2BE0085C3BB /* Foundation.framework in Frameworks */, 94 | F893845C163AD2BE0085C3BB /* CoreGraphics.framework in Frameworks */, 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | /* End PBXFrameworksBuildPhase section */ 99 | 100 | /* Begin PBXGroup section */ 101 | F8938448163AD2BE0085C3BB = { 102 | isa = PBXGroup; 103 | children = ( 104 | F89384BB163AD3500085C3BB /* PaperFoldMenuController */, 105 | F893845D163AD2BE0085C3BB /* Demo */, 106 | F8938456163AD2BE0085C3BB /* Frameworks */, 107 | F8938454163AD2BE0085C3BB /* Products */, 108 | ); 109 | sourceTree = ""; 110 | }; 111 | F8938454163AD2BE0085C3BB /* Products */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | F8938453163AD2BE0085C3BB /* Demo.app */, 115 | ); 116 | name = Products; 117 | sourceTree = ""; 118 | }; 119 | F8938456163AD2BE0085C3BB /* Frameworks */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | F8938534163AD6FA0085C3BB /* QuartzCore.framework */, 123 | F8938457163AD2BE0085C3BB /* UIKit.framework */, 124 | F8938459163AD2BE0085C3BB /* Foundation.framework */, 125 | F893845B163AD2BE0085C3BB /* CoreGraphics.framework */, 126 | ); 127 | name = Frameworks; 128 | sourceTree = ""; 129 | }; 130 | F893845D163AD2BE0085C3BB /* Demo */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | F8938466163AD2BE0085C3BB /* AppDelegate.h */, 134 | F8938467163AD2BE0085C3BB /* AppDelegate.m */, 135 | F893853A163AD8680085C3BB /* DemoMenuController.h */, 136 | F893853B163AD8680085C3BB /* DemoMenuController.m */, 137 | F8C000D4163B6B7300654C1E /* DemoRootViewController.h */, 138 | F8C000D5163B6B7300654C1E /* DemoRootViewController.m */, 139 | F893845E163AD2BE0085C3BB /* Supporting Files */, 140 | ); 141 | path = Demo; 142 | sourceTree = ""; 143 | }; 144 | F893845E163AD2BE0085C3BB /* Supporting Files */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | F8C000CE163B67DF00654C1E /* cellBg@2x.png */, 148 | F8C000D2163B691E00654C1E /* cellBgSelected@2x.png */, 149 | F893845F163AD2BE0085C3BB /* Demo-Info.plist */, 150 | F8938460163AD2BE0085C3BB /* InfoPlist.strings */, 151 | F8938463163AD2BE0085C3BB /* main.m */, 152 | F8938465163AD2BE0085C3BB /* Demo-Prefix.pch */, 153 | F8938469163AD2BE0085C3BB /* Default.png */, 154 | F893846B163AD2BE0085C3BB /* Default@2x.png */, 155 | F893846D163AD2BE0085C3BB /* Default-568h@2x.png */, 156 | ); 157 | name = "Supporting Files"; 158 | sourceTree = ""; 159 | }; 160 | F89384BB163AD3500085C3BB /* PaperFoldMenuController */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | F89384EB163AD49E0085C3BB /* PaperFold */, 164 | F89384C4163AD3BC0085C3BB /* PaperFoldMenuController.h */, 165 | F89384C5163AD3BC0085C3BB /* PaperFoldMenuController.m */, 166 | F8938557163ADFE40085C3BB /* PaperFoldMenuControllerDelegate.h */, 167 | ); 168 | name = PaperFoldMenuController; 169 | sourceTree = ""; 170 | }; 171 | F89384EB163AD49E0085C3BB /* PaperFold */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | F89384EC163AD49E0085C3BB /* FacingView.h */, 175 | F89384ED163AD49E0085C3BB /* FacingView.m */, 176 | F89384EE163AD49E0085C3BB /* FoldView.h */, 177 | F89384EF163AD49E0085C3BB /* FoldView.m */, 178 | F89384F0163AD49E0085C3BB /* MultiFoldView.h */, 179 | F89384F1163AD49E0085C3BB /* MultiFoldView.m */, 180 | F89384F2163AD49E0085C3BB /* PaperFoldNavigationController.h */, 181 | F89384F3163AD49E0085C3BB /* PaperFoldNavigationController.m */, 182 | F89384F4163AD49E0085C3BB /* PaperFoldResources.bundle */, 183 | F89384F5163AD49E0085C3BB /* PaperFoldSwipeHintView.h */, 184 | F89384F6163AD49E0085C3BB /* PaperFoldSwipeHintView.m */, 185 | F89384F7163AD49E0085C3BB /* PaperFoldView.h */, 186 | F89384F8163AD49E0085C3BB /* PaperFoldView.m */, 187 | F89384F9163AD49E0085C3BB /* Resources */, 188 | F89384FC163AD49E0085C3BB /* ShadowView.h */, 189 | F89384FD163AD49E0085C3BB /* ShadowView.m */, 190 | F89384FE163AD49E0085C3BB /* TouchThroughUIView.h */, 191 | F89384FF163AD49E0085C3BB /* TouchThroughUIView.m */, 192 | F8938500163AD49E0085C3BB /* UIView+Screenshot.h */, 193 | F8938501163AD49E0085C3BB /* UIView+Screenshot.m */, 194 | ); 195 | name = PaperFold; 196 | path = ../PaperFoldMenuController/PaperFold/PaperFold/PaperFold/PaperFold; 197 | sourceTree = ""; 198 | }; 199 | F89384F9163AD49E0085C3BB /* Resources */ = { 200 | isa = PBXGroup; 201 | children = ( 202 | F89384FA163AD49E0085C3BB /* swipe_guide.psd */, 203 | F89384FB163AD49E0085C3BB /* swipe_guide2.psd */, 204 | ); 205 | path = Resources; 206 | sourceTree = ""; 207 | }; 208 | /* End PBXGroup section */ 209 | 210 | /* Begin PBXNativeTarget section */ 211 | F8938452163AD2BE0085C3BB /* Demo */ = { 212 | isa = PBXNativeTarget; 213 | buildConfigurationList = F8938471163AD2BE0085C3BB /* Build configuration list for PBXNativeTarget "Demo" */; 214 | buildPhases = ( 215 | F893844F163AD2BE0085C3BB /* Sources */, 216 | F8938450163AD2BE0085C3BB /* Frameworks */, 217 | F8938451163AD2BE0085C3BB /* Resources */, 218 | ); 219 | buildRules = ( 220 | ); 221 | dependencies = ( 222 | ); 223 | name = Demo; 224 | productName = Demo; 225 | productReference = F8938453163AD2BE0085C3BB /* Demo.app */; 226 | productType = "com.apple.product-type.application"; 227 | }; 228 | /* End PBXNativeTarget section */ 229 | 230 | /* Begin PBXProject section */ 231 | F893844A163AD2BE0085C3BB /* Project object */ = { 232 | isa = PBXProject; 233 | attributes = { 234 | LastUpgradeCheck = 0450; 235 | ORGANIZATIONNAME = "Hon Cheng Muh"; 236 | }; 237 | buildConfigurationList = F893844D163AD2BE0085C3BB /* Build configuration list for PBXProject "Demo" */; 238 | compatibilityVersion = "Xcode 3.2"; 239 | developmentRegion = English; 240 | hasScannedForEncodings = 0; 241 | knownRegions = ( 242 | en, 243 | ); 244 | mainGroup = F8938448163AD2BE0085C3BB; 245 | productRefGroup = F8938454163AD2BE0085C3BB /* Products */; 246 | projectDirPath = ""; 247 | projectRoot = ""; 248 | targets = ( 249 | F8938452163AD2BE0085C3BB /* Demo */, 250 | ); 251 | }; 252 | /* End PBXProject section */ 253 | 254 | /* Begin PBXResourcesBuildPhase section */ 255 | F8938451163AD2BE0085C3BB /* Resources */ = { 256 | isa = PBXResourcesBuildPhase; 257 | buildActionMask = 2147483647; 258 | files = ( 259 | F8938462163AD2BE0085C3BB /* InfoPlist.strings in Resources */, 260 | F893846A163AD2BE0085C3BB /* Default.png in Resources */, 261 | F893846C163AD2BE0085C3BB /* Default@2x.png in Resources */, 262 | F893846E163AD2BE0085C3BB /* Default-568h@2x.png in Resources */, 263 | F8938506163AD49E0085C3BB /* PaperFoldResources.bundle in Resources */, 264 | F8938509163AD49E0085C3BB /* swipe_guide.psd in Resources */, 265 | F893850A163AD49E0085C3BB /* swipe_guide2.psd in Resources */, 266 | F8C000CF163B67DF00654C1E /* cellBg@2x.png in Resources */, 267 | F8C000D3163B691E00654C1E /* cellBgSelected@2x.png in Resources */, 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | /* End PBXResourcesBuildPhase section */ 272 | 273 | /* Begin PBXSourcesBuildPhase section */ 274 | F893844F163AD2BE0085C3BB /* Sources */ = { 275 | isa = PBXSourcesBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | F8938464163AD2BE0085C3BB /* main.m in Sources */, 279 | F8938468163AD2BE0085C3BB /* AppDelegate.m in Sources */, 280 | F89384C6163AD3BC0085C3BB /* PaperFoldMenuController.m in Sources */, 281 | F8938502163AD49E0085C3BB /* FacingView.m in Sources */, 282 | F8938503163AD49E0085C3BB /* FoldView.m in Sources */, 283 | F8938504163AD49E0085C3BB /* MultiFoldView.m in Sources */, 284 | F8938505163AD49E0085C3BB /* PaperFoldNavigationController.m in Sources */, 285 | F8938507163AD49E0085C3BB /* PaperFoldSwipeHintView.m in Sources */, 286 | F8938508163AD49E0085C3BB /* PaperFoldView.m in Sources */, 287 | F893850B163AD49E0085C3BB /* ShadowView.m in Sources */, 288 | F893850C163AD49E0085C3BB /* TouchThroughUIView.m in Sources */, 289 | F893850D163AD49E0085C3BB /* UIView+Screenshot.m in Sources */, 290 | F893853C163AD8680085C3BB /* DemoMenuController.m in Sources */, 291 | F8C000D6163B6B7300654C1E /* DemoRootViewController.m in Sources */, 292 | ); 293 | runOnlyForDeploymentPostprocessing = 0; 294 | }; 295 | /* End PBXSourcesBuildPhase section */ 296 | 297 | /* Begin PBXVariantGroup section */ 298 | F8938460163AD2BE0085C3BB /* InfoPlist.strings */ = { 299 | isa = PBXVariantGroup; 300 | children = ( 301 | F8938461163AD2BE0085C3BB /* en */, 302 | ); 303 | name = InfoPlist.strings; 304 | sourceTree = ""; 305 | }; 306 | /* End PBXVariantGroup section */ 307 | 308 | /* Begin XCBuildConfiguration section */ 309 | F893846F163AD2BE0085C3BB /* Debug */ = { 310 | isa = XCBuildConfiguration; 311 | buildSettings = { 312 | ALWAYS_SEARCH_USER_PATHS = NO; 313 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 314 | CLANG_CXX_LIBRARY = "libc++"; 315 | CLANG_ENABLE_OBJC_ARC = YES; 316 | CLANG_WARN_EMPTY_BODY = YES; 317 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 318 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 319 | COPY_PHASE_STRIP = NO; 320 | GCC_C_LANGUAGE_STANDARD = gnu99; 321 | GCC_DYNAMIC_NO_PIC = NO; 322 | GCC_OPTIMIZATION_LEVEL = 0; 323 | GCC_PREPROCESSOR_DEFINITIONS = ( 324 | "DEBUG=1", 325 | "$(inherited)", 326 | ); 327 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 328 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 329 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 330 | GCC_WARN_UNUSED_VARIABLE = YES; 331 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 332 | SDKROOT = iphoneos; 333 | }; 334 | name = Debug; 335 | }; 336 | F8938470163AD2BE0085C3BB /* Release */ = { 337 | isa = XCBuildConfiguration; 338 | buildSettings = { 339 | ALWAYS_SEARCH_USER_PATHS = NO; 340 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 341 | CLANG_CXX_LIBRARY = "libc++"; 342 | CLANG_ENABLE_OBJC_ARC = YES; 343 | CLANG_WARN_EMPTY_BODY = YES; 344 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 345 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 346 | COPY_PHASE_STRIP = YES; 347 | GCC_C_LANGUAGE_STANDARD = gnu99; 348 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 349 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 350 | GCC_WARN_UNUSED_VARIABLE = YES; 351 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 352 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 353 | SDKROOT = iphoneos; 354 | VALIDATE_PRODUCT = YES; 355 | }; 356 | name = Release; 357 | }; 358 | F8938472163AD2BE0085C3BB /* Debug */ = { 359 | isa = XCBuildConfiguration; 360 | buildSettings = { 361 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 362 | GCC_PREFIX_HEADER = "Demo/Demo-Prefix.pch"; 363 | INFOPLIST_FILE = "Demo/Demo-Info.plist"; 364 | PRODUCT_NAME = "$(TARGET_NAME)"; 365 | WRAPPER_EXTENSION = app; 366 | }; 367 | name = Debug; 368 | }; 369 | F8938473163AD2BE0085C3BB /* Release */ = { 370 | isa = XCBuildConfiguration; 371 | buildSettings = { 372 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 373 | GCC_PREFIX_HEADER = "Demo/Demo-Prefix.pch"; 374 | INFOPLIST_FILE = "Demo/Demo-Info.plist"; 375 | PRODUCT_NAME = "$(TARGET_NAME)"; 376 | WRAPPER_EXTENSION = app; 377 | }; 378 | name = Release; 379 | }; 380 | /* End XCBuildConfiguration section */ 381 | 382 | /* Begin XCConfigurationList section */ 383 | F893844D163AD2BE0085C3BB /* Build configuration list for PBXProject "Demo" */ = { 384 | isa = XCConfigurationList; 385 | buildConfigurations = ( 386 | F893846F163AD2BE0085C3BB /* Debug */, 387 | F8938470163AD2BE0085C3BB /* Release */, 388 | ); 389 | defaultConfigurationIsVisible = 0; 390 | defaultConfigurationName = Release; 391 | }; 392 | F8938471163AD2BE0085C3BB /* Build configuration list for PBXNativeTarget "Demo" */ = { 393 | isa = XCConfigurationList; 394 | buildConfigurations = ( 395 | F8938472163AD2BE0085C3BB /* Debug */, 396 | F8938473163AD2BE0085C3BB /* Release */, 397 | ); 398 | defaultConfigurationIsVisible = 0; 399 | defaultConfigurationName = Release; 400 | }; 401 | /* End XCConfigurationList section */ 402 | }; 403 | rootObject = F893844A163AD2BE0085C3BB /* Project object */; 404 | } 405 | --------------------------------------------------------------------------------