├── PathMenuExample ├── en.lproj │ ├── InfoPlist.strings │ └── ViewController.xib ├── background.png ├── email-button.png ├── main-button.png ├── money-button.png ├── smile-button.png ├── background@2x.png ├── comment-button.png ├── email-button@2x.png ├── location-button.png ├── main-button@2x.png ├── money-button@2x.png ├── smile-button@2x.png ├── comment-button@2x.png ├── location-button@2x.png ├── PathMenuExample-Prefix.pch ├── main.m ├── AppDelegate.h ├── ViewController.h ├── ExpandableNavigation.h ├── PathMenuExample-Info.plist ├── ViewController.m ├── AppDelegate.m └── ExpandableNavigation.m ├── README └── PathMenuExample.xcodeproj └── project.pbxproj /PathMenuExample/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /PathMenuExample/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/background.png -------------------------------------------------------------------------------- /PathMenuExample/email-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/email-button.png -------------------------------------------------------------------------------- /PathMenuExample/main-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/main-button.png -------------------------------------------------------------------------------- /PathMenuExample/money-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/money-button.png -------------------------------------------------------------------------------- /PathMenuExample/smile-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/smile-button.png -------------------------------------------------------------------------------- /PathMenuExample/background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/background@2x.png -------------------------------------------------------------------------------- /PathMenuExample/comment-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/comment-button.png -------------------------------------------------------------------------------- /PathMenuExample/email-button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/email-button@2x.png -------------------------------------------------------------------------------- /PathMenuExample/location-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/location-button.png -------------------------------------------------------------------------------- /PathMenuExample/main-button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/main-button@2x.png -------------------------------------------------------------------------------- /PathMenuExample/money-button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/money-button@2x.png -------------------------------------------------------------------------------- /PathMenuExample/smile-button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/smile-button@2x.png -------------------------------------------------------------------------------- /PathMenuExample/comment-button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/comment-button@2x.png -------------------------------------------------------------------------------- /PathMenuExample/location-button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tobins/PathMenuExample/HEAD/PathMenuExample/location-button@2x.png -------------------------------------------------------------------------------- /PathMenuExample/PathMenuExample-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'PathMenuExample' target in the 'PathMenuExample' 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 | -------------------------------------------------------------------------------- /PathMenuExample/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/9/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. 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 | -------------------------------------------------------------------------------- /PathMenuExample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/9/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class ViewController; 12 | 13 | @interface AppDelegate : UIResponder 14 | 15 | @property (strong, nonatomic) UIWindow *window; 16 | 17 | @property (strong, nonatomic) ViewController *viewController; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Overview 2 | ======== 3 | Path 2.0's iPhone app has a really neat navigation system. This is a simple example of how to add a similar menu menu system to your iPhone app. Just run the example and click on the nice red button. 4 | 5 | The navigation code for expanding & collapsing an array of menu items/buttons (views) is in the ExpandableNavigation.m/.h files. Looking at the usage example in ViewController.m should be pretty self explanitory. However if you have any questions feel free to reach out to me on twitter (@tobins). 6 | 7 | n'joy! 8 | 9 | Tobin // @tobins // http://tob.in 10 | 11 | -------------------------------------------------------------------------------- /PathMenuExample/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/9/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class ExpandableNavigation; 12 | 13 | @interface ViewController : UIViewController { 14 | UIButton* button1; 15 | UIButton* button2; 16 | UIButton* button3; 17 | UIButton* button4; 18 | UIButton* button5; 19 | UIButton* main; 20 | ExpandableNavigation* navigation; 21 | } 22 | 23 | @property (nonatomic, retain) IBOutlet UIButton *button1; 24 | @property (nonatomic, retain) IBOutlet UIButton *button2; 25 | @property (nonatomic, retain) IBOutlet UIButton *button3; 26 | @property (nonatomic, retain) IBOutlet UIButton *button4; 27 | @property (nonatomic, retain) IBOutlet UIButton *button5; 28 | @property (nonatomic, retain) IBOutlet UIButton *main; 29 | 30 | @property (retain) ExpandableNavigation* navigation; 31 | 32 | - (IBAction) touchMenuItem:(id)sender; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /PathMenuExample/ExpandableNavigation.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExpandableNavigation.h 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/8/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ExpandableNavigation : NSObject { 12 | UIButton* _mainButton; 13 | NSArray* _menuItems; 14 | CGFloat _radius; 15 | CGFloat speed; 16 | CGFloat bounce; 17 | CGFloat bounceSpeed; 18 | BOOL expanded; 19 | BOOL transition; 20 | } 21 | 22 | @property (retain) UIButton* mainButton; 23 | @property (retain) NSArray* menuItems; 24 | @property CGFloat radius; 25 | @property CGFloat speed; 26 | @property CGFloat bounce; 27 | @property CGFloat bounceSpeed; 28 | @property (readonly) BOOL expanded; 29 | @property (readonly) BOOL transition; 30 | 31 | - (id)initWithMenuItems:(NSArray*) menuItems 32 | mainButton:(UIButton*) mainButton 33 | radius:(CGFloat) radius; 34 | - (id)init; 35 | 36 | - (void) expand; 37 | - (void) collapse; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /PathMenuExample/PathMenuExample-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFiles 12 | 13 | CFBundleIdentifier 14 | com.tobin.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1.0 27 | LSRequiresIPhoneOS 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /PathMenuExample/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/9/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "ExpandableNavigation.h" 11 | 12 | @implementation ViewController 13 | 14 | @synthesize button1; 15 | @synthesize button2; 16 | @synthesize button3; 17 | @synthesize button4; 18 | @synthesize button5; 19 | @synthesize main; 20 | @synthesize navigation; 21 | 22 | - (void)didReceiveMemoryWarning 23 | { 24 | [super didReceiveMemoryWarning]; 25 | // Release any cached data, images, etc that aren't in use. 26 | } 27 | 28 | #pragma mark - View lifecycle 29 | 30 | - (void)viewDidLoad 31 | { 32 | [super viewDidLoad]; 33 | 34 | // initialize ExpandableNavigation object with an array of buttons. 35 | NSArray* buttons = [NSArray arrayWithObjects:button1, button2, button3, button4, button5, nil]; 36 | 37 | self.navigation = [[[ExpandableNavigation alloc] initWithMenuItems:buttons mainButton:self.main radius:120.0] autorelease]; 38 | } 39 | 40 | - (void)viewDidUnload 41 | { 42 | [super viewDidUnload]; 43 | // Release any retained subviews of the main view. 44 | self.button1 = nil; 45 | self.button2 = nil; 46 | self.button3 = nil; 47 | self.button4 = nil; 48 | self.button5 = nil; 49 | self.main = nil; 50 | self.navigation = nil; 51 | } 52 | 53 | - (void)viewWillAppear:(BOOL)animated 54 | { 55 | [super viewWillAppear:animated]; 56 | } 57 | 58 | - (void)viewDidAppear:(BOOL)animated 59 | { 60 | [super viewDidAppear:animated]; 61 | } 62 | 63 | - (void)viewWillDisappear:(BOOL)animated 64 | { 65 | [super viewWillDisappear:animated]; 66 | } 67 | 68 | - (void)viewDidDisappear:(BOOL)animated 69 | { 70 | [super viewDidDisappear:animated]; 71 | } 72 | 73 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 74 | { 75 | // Only support portriat orientation for now 76 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 77 | } 78 | 79 | - (IBAction) touchMenuItem:(id)sender { 80 | 81 | // if the menu is expanded, then collapse it when an menu item is touched. 82 | UIAlertView *message = [[[UIAlertView alloc] initWithTitle:nil 83 | message:[(UIButton *)sender currentTitle] 84 | delegate:nil 85 | cancelButtonTitle:@"OK" 86 | otherButtonTitles:nil] autorelease]; 87 | [message show]; 88 | 89 | if( self.navigation.expanded ) { 90 | [self.navigation collapse]; 91 | } 92 | } 93 | @end 94 | -------------------------------------------------------------------------------- /PathMenuExample/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/9/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | #import "ViewController.h" 12 | 13 | @implementation AppDelegate 14 | 15 | @synthesize window = _window; 16 | @synthesize viewController = _viewController; 17 | 18 | - (void)dealloc 19 | { 20 | [_window release]; 21 | [_viewController release]; 22 | [super dealloc]; 23 | } 24 | 25 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 26 | { 27 | self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 28 | // Override point for customization after application launch. 29 | self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; 30 | self.window.rootViewController = self.viewController; 31 | [self.window makeKeyAndVisible]; 32 | return YES; 33 | } 34 | 35 | - (void)applicationWillResignActive:(UIApplication *)application 36 | { 37 | /* 38 | Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 39 | Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 40 | */ 41 | } 42 | 43 | - (void)applicationDidEnterBackground:(UIApplication *)application 44 | { 45 | /* 46 | Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 47 | If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 48 | */ 49 | } 50 | 51 | - (void)applicationWillEnterForeground:(UIApplication *)application 52 | { 53 | /* 54 | Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 55 | */ 56 | } 57 | 58 | - (void)applicationDidBecomeActive:(UIApplication *)application 59 | { 60 | /* 61 | Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 62 | */ 63 | } 64 | 65 | - (void)applicationWillTerminate:(UIApplication *)application 66 | { 67 | /* 68 | Called when the application is about to terminate. 69 | Save data if appropriate. 70 | See also applicationDidEnterBackground:. 71 | */ 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /PathMenuExample/ExpandableNavigation.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExpandableNavigation.m 3 | // PathMenuExample 4 | // 5 | // Created by Tobin Schwaiger-Hastanan on 1/8/12. 6 | // Copyright (c) 2012 Tobin Schwaiger-Hastanan. All rights reserved. 7 | // 8 | 9 | #import "ExpandableNavigation.h" 10 | 11 | @implementation ExpandableNavigation 12 | 13 | @synthesize mainButton = _mainButton; 14 | @synthesize menuItems = _menuItems; 15 | @synthesize radius = _radius; 16 | @synthesize speed; 17 | @synthesize bounce; 18 | @synthesize bounceSpeed; 19 | @synthesize expanded; 20 | @synthesize transition; 21 | 22 | 23 | - (id)initWithMenuItems:(NSArray*) menuItems mainButton:(UIButton*) mainButton radius:(CGFloat) radius { 24 | 25 | if( self = [super init] ) { 26 | self.menuItems = menuItems; 27 | self.mainButton = mainButton; 28 | self.radius = radius; 29 | self.speed = 0.15; 30 | self.bounce = 0.225; 31 | self.bounceSpeed = 0.1; 32 | expanded = NO; 33 | transition = NO; 34 | 35 | if( self.mainButton != nil ) { 36 | for (UIView* view in self.menuItems) { 37 | 38 | view.center = self.mainButton.center; 39 | } 40 | 41 | [self.mainButton addTarget:self action:@selector(press:) forControlEvents:UIControlEventTouchUpInside]; 42 | } 43 | } 44 | 45 | return self; 46 | } 47 | 48 | - (id)init { 49 | // calling the default init method is not allowed, this will raise an exception if it is called. 50 | if( self = [super init] ) { 51 | [self release]; 52 | [self doesNotRecognizeSelector:_cmd]; 53 | } 54 | return nil; 55 | } 56 | 57 | - (void) expand { 58 | transition = YES; 59 | 60 | [UIView animateWithDuration:self.speed animations:^{ 61 | self.mainButton.transform = CGAffineTransformMakeRotation( 45.0 * M_PI/180 ); 62 | }]; 63 | 64 | for (UIView* view in self.menuItems) { 65 | int index = [self.menuItems indexOfObject:view]; 66 | CGFloat oneOverCount = self.menuItems.count<=1?1.0:(1.0/(self.menuItems.count-1)); 67 | CGFloat indexOverCount = index * oneOverCount; 68 | CGFloat rad =(1.0 - indexOverCount) * 90.0 * M_PI/180; 69 | CGAffineTransform rotation = CGAffineTransformMakeRotation( rad ); 70 | CGFloat x = (self.radius + self.bounce * self.radius) * rotation.a; 71 | CGFloat y = (self.radius + self.bounce * self.radius) * rotation.c; 72 | CGPoint center = CGPointMake( view.center.x + x , view.center.y + y); 73 | [UIView animateWithDuration: self.speed 74 | delay: self.speed * indexOverCount 75 | options: UIViewAnimationOptionCurveEaseIn 76 | animations:^{ 77 | view.center = center; 78 | } 79 | completion:^(BOOL finished){ 80 | [UIView animateWithDuration:self.bounceSpeed 81 | animations:^{ 82 | CGFloat x = self.bounce * self.radius * rotation.a; 83 | CGFloat y = self.bounce * self.radius * rotation.c; 84 | CGPoint center = CGPointMake( view.center.x - x , view.center.y - y); 85 | view.center = center; 86 | }]; 87 | if( view == self.menuItems.lastObject ) { 88 | expanded = YES; 89 | transition = NO; 90 | } 91 | }]; 92 | } 93 | } 94 | 95 | - (void) collapse { 96 | transition = YES; 97 | 98 | [UIView animateWithDuration:self.speed animations:^{ 99 | self.mainButton.transform = CGAffineTransformMakeRotation( 0 ); 100 | }]; 101 | 102 | for (UIView* view in self.menuItems) { 103 | int index = [self.menuItems indexOfObject:view]; 104 | CGFloat oneOverCount = self.menuItems.count<=1?1.0:(1.0/(self.menuItems.count-1)); 105 | CGFloat indexOverCount = index * oneOverCount; 106 | [UIView animateWithDuration:self.speed 107 | delay:(1.0 - indexOverCount) * self.speed 108 | options: UIViewAnimationOptionCurveEaseIn 109 | animations:^{ 110 | view.center = self.mainButton.center; 111 | } 112 | completion:^(BOOL finished){ 113 | if( view == self.menuItems.lastObject ) { 114 | expanded = NO; 115 | transition = NO; 116 | } 117 | }]; 118 | } 119 | } 120 | 121 | - (IBAction)press:(id)sender { 122 | if( !self.transition ) { 123 | if( !self.expanded ) { 124 | [self expand]; 125 | } else { 126 | [self collapse]; 127 | } 128 | } 129 | } 130 | 131 | - (void)dealloc { 132 | self.mainButton = nil; 133 | self.menuItems = nil; 134 | [super dealloc]; 135 | } 136 | 137 | @end 138 | -------------------------------------------------------------------------------- /PathMenuExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | AB0A2A8514BB6C3E0009E3BE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A2A8414BB6C3E0009E3BE /* UIKit.framework */; }; 11 | AB0A2A8714BB6C3E0009E3BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A2A8614BB6C3E0009E3BE /* Foundation.framework */; }; 12 | AB0A2A8914BB6C3E0009E3BE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A2A8814BB6C3E0009E3BE /* CoreGraphics.framework */; }; 13 | AB0A2A8F14BB6C3E0009E3BE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2A8D14BB6C3E0009E3BE /* InfoPlist.strings */; }; 14 | AB0A2A9114BB6C3E0009E3BE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AB0A2A9014BB6C3E0009E3BE /* main.m */; }; 15 | AB0A2A9514BB6C3E0009E3BE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AB0A2A9414BB6C3E0009E3BE /* AppDelegate.m */; }; 16 | AB0A2A9814BB6C3E0009E3BE /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB0A2A9714BB6C3E0009E3BE /* ViewController.m */; }; 17 | AB0A2A9B14BB6C3E0009E3BE /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2A9914BB6C3E0009E3BE /* ViewController.xib */; }; 18 | AB0A2AC714BB6F4A0009E3BE /* ExpandableNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = AB0A2AC614BB6F4A0009E3BE /* ExpandableNavigation.m */; }; 19 | AB0A2AD614BB6F720009E3BE /* background.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AC814BB6F720009E3BE /* background.png */; }; 20 | AB0A2AD714BB6F720009E3BE /* background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AC914BB6F720009E3BE /* background@2x.png */; }; 21 | AB0A2AD814BB6F720009E3BE /* comment-button.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2ACA14BB6F720009E3BE /* comment-button.png */; }; 22 | AB0A2AD914BB6F720009E3BE /* comment-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2ACB14BB6F720009E3BE /* comment-button@2x.png */; }; 23 | AB0A2ADA14BB6F720009E3BE /* email-button.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2ACC14BB6F720009E3BE /* email-button.png */; }; 24 | AB0A2ADB14BB6F720009E3BE /* email-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2ACD14BB6F720009E3BE /* email-button@2x.png */; }; 25 | AB0A2ADC14BB6F720009E3BE /* location-button.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2ACE14BB6F720009E3BE /* location-button.png */; }; 26 | AB0A2ADD14BB6F720009E3BE /* location-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2ACF14BB6F720009E3BE /* location-button@2x.png */; }; 27 | AB0A2ADE14BB6F720009E3BE /* main-button.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AD014BB6F720009E3BE /* main-button.png */; }; 28 | AB0A2ADF14BB6F720009E3BE /* main-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AD114BB6F720009E3BE /* main-button@2x.png */; }; 29 | AB0A2AE014BB6F720009E3BE /* money-button.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AD214BB6F720009E3BE /* money-button.png */; }; 30 | AB0A2AE114BB6F720009E3BE /* money-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AD314BB6F720009E3BE /* money-button@2x.png */; }; 31 | AB0A2AE214BB6F720009E3BE /* smile-button.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AD414BB6F720009E3BE /* smile-button.png */; }; 32 | AB0A2AE314BB6F720009E3BE /* smile-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AD514BB6F720009E3BE /* smile-button@2x.png */; }; 33 | AB0A2AE514BB70A50009E3BE /* README in Resources */ = {isa = PBXBuildFile; fileRef = AB0A2AE414BB70A50009E3BE /* README */; }; 34 | /* End PBXBuildFile section */ 35 | 36 | /* Begin PBXFileReference section */ 37 | AB0A2A8014BB6C3E0009E3BE /* PathMenuExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PathMenuExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | AB0A2A8414BB6C3E0009E3BE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 39 | AB0A2A8614BB6C3E0009E3BE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 40 | AB0A2A8814BB6C3E0009E3BE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 41 | AB0A2A8C14BB6C3E0009E3BE /* PathMenuExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PathMenuExample-Info.plist"; sourceTree = ""; }; 42 | AB0A2A8E14BB6C3E0009E3BE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 43 | AB0A2A9014BB6C3E0009E3BE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 44 | AB0A2A9214BB6C3E0009E3BE /* PathMenuExample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PathMenuExample-Prefix.pch"; sourceTree = ""; }; 45 | AB0A2A9314BB6C3E0009E3BE /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 46 | AB0A2A9414BB6C3E0009E3BE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 47 | AB0A2A9614BB6C3E0009E3BE /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 48 | AB0A2A9714BB6C3E0009E3BE /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 49 | AB0A2A9A14BB6C3E0009E3BE /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController.xib; sourceTree = ""; }; 50 | AB0A2AC514BB6F4A0009E3BE /* ExpandableNavigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExpandableNavigation.h; sourceTree = ""; }; 51 | AB0A2AC614BB6F4A0009E3BE /* ExpandableNavigation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExpandableNavigation.m; sourceTree = ""; }; 52 | AB0A2AC814BB6F720009E3BE /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = background.png; sourceTree = ""; }; 53 | AB0A2AC914BB6F720009E3BE /* background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "background@2x.png"; sourceTree = ""; }; 54 | AB0A2ACA14BB6F720009E3BE /* comment-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "comment-button.png"; sourceTree = ""; }; 55 | AB0A2ACB14BB6F720009E3BE /* comment-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "comment-button@2x.png"; sourceTree = ""; }; 56 | AB0A2ACC14BB6F720009E3BE /* email-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "email-button.png"; sourceTree = ""; }; 57 | AB0A2ACD14BB6F720009E3BE /* email-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "email-button@2x.png"; sourceTree = ""; }; 58 | AB0A2ACE14BB6F720009E3BE /* location-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-button.png"; sourceTree = ""; }; 59 | AB0A2ACF14BB6F720009E3BE /* location-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-button@2x.png"; sourceTree = ""; }; 60 | AB0A2AD014BB6F720009E3BE /* main-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "main-button.png"; sourceTree = ""; }; 61 | AB0A2AD114BB6F720009E3BE /* main-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "main-button@2x.png"; sourceTree = ""; }; 62 | AB0A2AD214BB6F720009E3BE /* money-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "money-button.png"; sourceTree = ""; }; 63 | AB0A2AD314BB6F720009E3BE /* money-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "money-button@2x.png"; sourceTree = ""; }; 64 | AB0A2AD414BB6F720009E3BE /* smile-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "smile-button.png"; sourceTree = ""; }; 65 | AB0A2AD514BB6F720009E3BE /* smile-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "smile-button@2x.png"; sourceTree = ""; }; 66 | AB0A2AE414BB70A50009E3BE /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 67 | /* End PBXFileReference section */ 68 | 69 | /* Begin PBXFrameworksBuildPhase section */ 70 | AB0A2A7D14BB6C3E0009E3BE /* Frameworks */ = { 71 | isa = PBXFrameworksBuildPhase; 72 | buildActionMask = 2147483647; 73 | files = ( 74 | AB0A2A8514BB6C3E0009E3BE /* UIKit.framework in Frameworks */, 75 | AB0A2A8714BB6C3E0009E3BE /* Foundation.framework in Frameworks */, 76 | AB0A2A8914BB6C3E0009E3BE /* CoreGraphics.framework in Frameworks */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | /* End PBXFrameworksBuildPhase section */ 81 | 82 | /* Begin PBXGroup section */ 83 | AB0A2A7514BB6C3E0009E3BE = { 84 | isa = PBXGroup; 85 | children = ( 86 | AB0A2AE414BB70A50009E3BE /* README */, 87 | AB0A2A8A14BB6C3E0009E3BE /* PathMenuExample */, 88 | AB0A2A8314BB6C3E0009E3BE /* Frameworks */, 89 | AB0A2A8114BB6C3E0009E3BE /* Products */, 90 | ); 91 | sourceTree = ""; 92 | }; 93 | AB0A2A8114BB6C3E0009E3BE /* Products */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | AB0A2A8014BB6C3E0009E3BE /* PathMenuExample.app */, 97 | ); 98 | name = Products; 99 | sourceTree = ""; 100 | }; 101 | AB0A2A8314BB6C3E0009E3BE /* Frameworks */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | AB0A2A8414BB6C3E0009E3BE /* UIKit.framework */, 105 | AB0A2A8614BB6C3E0009E3BE /* Foundation.framework */, 106 | AB0A2A8814BB6C3E0009E3BE /* CoreGraphics.framework */, 107 | ); 108 | name = Frameworks; 109 | sourceTree = ""; 110 | }; 111 | AB0A2A8A14BB6C3E0009E3BE /* PathMenuExample */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | AB0A2AA114BB6C7F0009E3BE /* Images */, 115 | AB0A2AC514BB6F4A0009E3BE /* ExpandableNavigation.h */, 116 | AB0A2AC614BB6F4A0009E3BE /* ExpandableNavigation.m */, 117 | AB0A2A9314BB6C3E0009E3BE /* AppDelegate.h */, 118 | AB0A2A9414BB6C3E0009E3BE /* AppDelegate.m */, 119 | AB0A2A9614BB6C3E0009E3BE /* ViewController.h */, 120 | AB0A2A9714BB6C3E0009E3BE /* ViewController.m */, 121 | AB0A2A9914BB6C3E0009E3BE /* ViewController.xib */, 122 | AB0A2A8B14BB6C3E0009E3BE /* Supporting Files */, 123 | ); 124 | path = PathMenuExample; 125 | sourceTree = ""; 126 | }; 127 | AB0A2A8B14BB6C3E0009E3BE /* Supporting Files */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | AB0A2A8C14BB6C3E0009E3BE /* PathMenuExample-Info.plist */, 131 | AB0A2A8D14BB6C3E0009E3BE /* InfoPlist.strings */, 132 | AB0A2A9014BB6C3E0009E3BE /* main.m */, 133 | AB0A2A9214BB6C3E0009E3BE /* PathMenuExample-Prefix.pch */, 134 | ); 135 | name = "Supporting Files"; 136 | sourceTree = ""; 137 | }; 138 | AB0A2AA114BB6C7F0009E3BE /* Images */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | AB0A2AC814BB6F720009E3BE /* background.png */, 142 | AB0A2AC914BB6F720009E3BE /* background@2x.png */, 143 | AB0A2ACA14BB6F720009E3BE /* comment-button.png */, 144 | AB0A2ACB14BB6F720009E3BE /* comment-button@2x.png */, 145 | AB0A2ACC14BB6F720009E3BE /* email-button.png */, 146 | AB0A2ACD14BB6F720009E3BE /* email-button@2x.png */, 147 | AB0A2ACE14BB6F720009E3BE /* location-button.png */, 148 | AB0A2ACF14BB6F720009E3BE /* location-button@2x.png */, 149 | AB0A2AD014BB6F720009E3BE /* main-button.png */, 150 | AB0A2AD114BB6F720009E3BE /* main-button@2x.png */, 151 | AB0A2AD214BB6F720009E3BE /* money-button.png */, 152 | AB0A2AD314BB6F720009E3BE /* money-button@2x.png */, 153 | AB0A2AD414BB6F720009E3BE /* smile-button.png */, 154 | AB0A2AD514BB6F720009E3BE /* smile-button@2x.png */, 155 | ); 156 | name = Images; 157 | sourceTree = ""; 158 | }; 159 | /* End PBXGroup section */ 160 | 161 | /* Begin PBXNativeTarget section */ 162 | AB0A2A7F14BB6C3E0009E3BE /* PathMenuExample */ = { 163 | isa = PBXNativeTarget; 164 | buildConfigurationList = AB0A2A9E14BB6C3E0009E3BE /* Build configuration list for PBXNativeTarget "PathMenuExample" */; 165 | buildPhases = ( 166 | AB0A2A7C14BB6C3E0009E3BE /* Sources */, 167 | AB0A2A7D14BB6C3E0009E3BE /* Frameworks */, 168 | AB0A2A7E14BB6C3E0009E3BE /* Resources */, 169 | ); 170 | buildRules = ( 171 | ); 172 | dependencies = ( 173 | ); 174 | name = PathMenuExample; 175 | productName = PathMenuExample; 176 | productReference = AB0A2A8014BB6C3E0009E3BE /* PathMenuExample.app */; 177 | productType = "com.apple.product-type.application"; 178 | }; 179 | /* End PBXNativeTarget section */ 180 | 181 | /* Begin PBXProject section */ 182 | AB0A2A7714BB6C3E0009E3BE /* Project object */ = { 183 | isa = PBXProject; 184 | attributes = { 185 | LastUpgradeCheck = 0420; 186 | }; 187 | buildConfigurationList = AB0A2A7A14BB6C3E0009E3BE /* Build configuration list for PBXProject "PathMenuExample" */; 188 | compatibilityVersion = "Xcode 3.2"; 189 | developmentRegion = English; 190 | hasScannedForEncodings = 0; 191 | knownRegions = ( 192 | en, 193 | ); 194 | mainGroup = AB0A2A7514BB6C3E0009E3BE; 195 | productRefGroup = AB0A2A8114BB6C3E0009E3BE /* Products */; 196 | projectDirPath = ""; 197 | projectRoot = ""; 198 | targets = ( 199 | AB0A2A7F14BB6C3E0009E3BE /* PathMenuExample */, 200 | ); 201 | }; 202 | /* End PBXProject section */ 203 | 204 | /* Begin PBXResourcesBuildPhase section */ 205 | AB0A2A7E14BB6C3E0009E3BE /* Resources */ = { 206 | isa = PBXResourcesBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | AB0A2A8F14BB6C3E0009E3BE /* InfoPlist.strings in Resources */, 210 | AB0A2A9B14BB6C3E0009E3BE /* ViewController.xib in Resources */, 211 | AB0A2AD614BB6F720009E3BE /* background.png in Resources */, 212 | AB0A2AD714BB6F720009E3BE /* background@2x.png in Resources */, 213 | AB0A2AD814BB6F720009E3BE /* comment-button.png in Resources */, 214 | AB0A2AD914BB6F720009E3BE /* comment-button@2x.png in Resources */, 215 | AB0A2ADA14BB6F720009E3BE /* email-button.png in Resources */, 216 | AB0A2ADB14BB6F720009E3BE /* email-button@2x.png in Resources */, 217 | AB0A2ADC14BB6F720009E3BE /* location-button.png in Resources */, 218 | AB0A2ADD14BB6F720009E3BE /* location-button@2x.png in Resources */, 219 | AB0A2ADE14BB6F720009E3BE /* main-button.png in Resources */, 220 | AB0A2ADF14BB6F720009E3BE /* main-button@2x.png in Resources */, 221 | AB0A2AE014BB6F720009E3BE /* money-button.png in Resources */, 222 | AB0A2AE114BB6F720009E3BE /* money-button@2x.png in Resources */, 223 | AB0A2AE214BB6F720009E3BE /* smile-button.png in Resources */, 224 | AB0A2AE314BB6F720009E3BE /* smile-button@2x.png in Resources */, 225 | AB0A2AE514BB70A50009E3BE /* README in Resources */, 226 | ); 227 | runOnlyForDeploymentPostprocessing = 0; 228 | }; 229 | /* End PBXResourcesBuildPhase section */ 230 | 231 | /* Begin PBXSourcesBuildPhase section */ 232 | AB0A2A7C14BB6C3E0009E3BE /* Sources */ = { 233 | isa = PBXSourcesBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | AB0A2A9114BB6C3E0009E3BE /* main.m in Sources */, 237 | AB0A2A9514BB6C3E0009E3BE /* AppDelegate.m in Sources */, 238 | AB0A2A9814BB6C3E0009E3BE /* ViewController.m in Sources */, 239 | AB0A2AC714BB6F4A0009E3BE /* ExpandableNavigation.m in Sources */, 240 | ); 241 | runOnlyForDeploymentPostprocessing = 0; 242 | }; 243 | /* End PBXSourcesBuildPhase section */ 244 | 245 | /* Begin PBXVariantGroup section */ 246 | AB0A2A8D14BB6C3E0009E3BE /* InfoPlist.strings */ = { 247 | isa = PBXVariantGroup; 248 | children = ( 249 | AB0A2A8E14BB6C3E0009E3BE /* en */, 250 | ); 251 | name = InfoPlist.strings; 252 | sourceTree = ""; 253 | }; 254 | AB0A2A9914BB6C3E0009E3BE /* ViewController.xib */ = { 255 | isa = PBXVariantGroup; 256 | children = ( 257 | AB0A2A9A14BB6C3E0009E3BE /* en */, 258 | ); 259 | name = ViewController.xib; 260 | sourceTree = ""; 261 | }; 262 | /* End PBXVariantGroup section */ 263 | 264 | /* Begin XCBuildConfiguration section */ 265 | AB0A2A9C14BB6C3E0009E3BE /* Debug */ = { 266 | isa = XCBuildConfiguration; 267 | buildSettings = { 268 | ALWAYS_SEARCH_USER_PATHS = NO; 269 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 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_VERSION = com.apple.compilers.llvm.clang.1_0; 281 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 282 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 283 | GCC_WARN_UNUSED_VARIABLE = YES; 284 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 285 | SDKROOT = iphoneos; 286 | }; 287 | name = Debug; 288 | }; 289 | AB0A2A9D14BB6C3E0009E3BE /* Release */ = { 290 | isa = XCBuildConfiguration; 291 | buildSettings = { 292 | ALWAYS_SEARCH_USER_PATHS = NO; 293 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 294 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 295 | COPY_PHASE_STRIP = YES; 296 | GCC_C_LANGUAGE_STANDARD = gnu99; 297 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 298 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 299 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 300 | GCC_WARN_UNUSED_VARIABLE = YES; 301 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 302 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 303 | SDKROOT = iphoneos; 304 | VALIDATE_PRODUCT = YES; 305 | }; 306 | name = Release; 307 | }; 308 | AB0A2A9F14BB6C3E0009E3BE /* Debug */ = { 309 | isa = XCBuildConfiguration; 310 | buildSettings = { 311 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 312 | GCC_PREFIX_HEADER = "PathMenuExample/PathMenuExample-Prefix.pch"; 313 | INFOPLIST_FILE = "PathMenuExample/PathMenuExample-Info.plist"; 314 | PRODUCT_NAME = "$(TARGET_NAME)"; 315 | WRAPPER_EXTENSION = app; 316 | }; 317 | name = Debug; 318 | }; 319 | AB0A2AA014BB6C3E0009E3BE /* Release */ = { 320 | isa = XCBuildConfiguration; 321 | buildSettings = { 322 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 323 | GCC_PREFIX_HEADER = "PathMenuExample/PathMenuExample-Prefix.pch"; 324 | INFOPLIST_FILE = "PathMenuExample/PathMenuExample-Info.plist"; 325 | PRODUCT_NAME = "$(TARGET_NAME)"; 326 | WRAPPER_EXTENSION = app; 327 | }; 328 | name = Release; 329 | }; 330 | /* End XCBuildConfiguration section */ 331 | 332 | /* Begin XCConfigurationList section */ 333 | AB0A2A7A14BB6C3E0009E3BE /* Build configuration list for PBXProject "PathMenuExample" */ = { 334 | isa = XCConfigurationList; 335 | buildConfigurations = ( 336 | AB0A2A9C14BB6C3E0009E3BE /* Debug */, 337 | AB0A2A9D14BB6C3E0009E3BE /* Release */, 338 | ); 339 | defaultConfigurationIsVisible = 0; 340 | defaultConfigurationName = Release; 341 | }; 342 | AB0A2A9E14BB6C3E0009E3BE /* Build configuration list for PBXNativeTarget "PathMenuExample" */ = { 343 | isa = XCConfigurationList; 344 | buildConfigurations = ( 345 | AB0A2A9F14BB6C3E0009E3BE /* Debug */, 346 | AB0A2AA014BB6C3E0009E3BE /* Release */, 347 | ); 348 | defaultConfigurationIsVisible = 0; 349 | defaultConfigurationName = Release; 350 | }; 351 | /* End XCConfigurationList section */ 352 | }; 353 | rootObject = AB0A2A7714BB6C3E0009E3BE /* Project object */; 354 | } 355 | -------------------------------------------------------------------------------- /PathMenuExample/en.lproj/ViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1280 5 | 11C74 6 | 1938 7 | 1138.23 8 | 567.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 933 12 | 13 | 14 | IBUIButton 15 | IBUIImageView 16 | IBUIView 17 | IBProxyObject 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 | 274 42 | {320, 480} 43 | 44 | 45 | 46 | _NS:567 47 | NO 48 | IBCocoaTouchFramework 49 | 50 | NSImage 51 | background.png 52 | 53 | 54 | 55 | 56 | 292 57 | {{51, 413}, {38, 38}} 58 | 59 | 60 | _NS:225 61 | NO 62 | IBCocoaTouchFramework 63 | 0 64 | 0 65 | No matter where you go, there you are. 66 | 67 | 3 68 | MQA 69 | 70 | 71 | 1 72 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 73 | 74 | 75 | 3 76 | MC41AA 77 | 78 | 79 | NSImage 80 | location-button.png 81 | 82 | 83 | 2 84 | 15 85 | 86 | 87 | Helvetica-Bold 88 | 15 89 | 16 90 | 91 | 92 | 93 | 94 | 292 95 | {{97, 412}, {38, 38}} 96 | 97 | 98 | _NS:225 99 | NO 100 | IBCocoaTouchFramework 101 | 0 102 | 0 103 | Money is not the most important thing in the world. Love is. Fortunately, I love money. 104 | 105 | 106 | 1 107 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 108 | 109 | 110 | 111 | NSImage 112 | money-button.png 113 | 114 | 115 | 116 | 117 | 118 | 119 | 292 120 | {{141, 412}, {38, 38}} 121 | 122 | 123 | _NS:225 124 | NO 125 | IBCocoaTouchFramework 126 | 0 127 | 0 128 | Talk to me on twitter @tobins 129 | 130 | 131 | 1 132 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 133 | 134 | 135 | 136 | NSImage 137 | comment-button.png 138 | 139 | 140 | 141 | 142 | 143 | 144 | 292 145 | {{187, 413}, {38, 38}} 146 | 147 | 148 | _NS:225 149 | NO 150 | IBCocoaTouchFramework 151 | 0 152 | 0 153 | Don't be shy, just say hi! hi@tob.in 154 | 155 | 156 | 1 157 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 158 | 159 | 160 | 161 | NSImage 162 | email-button.png 163 | 164 | 165 | 166 | 167 | 168 | 169 | 292 170 | {{233, 413}, {38, 38}} 171 | 172 | 173 | _NS:225 174 | NO 175 | IBCocoaTouchFramework 176 | 0 177 | 0 178 | You can find my regularly neglected blog at http://tob.in 179 | 180 | 181 | 1 182 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 183 | 184 | 185 | 186 | NSImage 187 | smile-button.png 188 | 189 | 190 | 191 | 192 | 193 | 194 | 292 195 | {{10, 412}, {38, 38}} 196 | 197 | 198 | 199 | _NS:225 200 | NO 201 | IBCocoaTouchFramework 202 | 0 203 | 0 204 | 205 | 206 | 1 207 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 208 | 209 | 210 | 211 | NSImage 212 | main-button.png 213 | 214 | 215 | 216 | 217 | 218 | {{0, 20}, {320, 460}} 219 | 220 | 221 | 222 | 223 | 3 224 | MC43NQA 225 | 226 | 2 227 | 228 | 229 | NO 230 | 231 | IBCocoaTouchFramework 232 | 233 | 234 | 235 | 236 | 237 | 238 | view 239 | 240 | 241 | 242 | 7 243 | 244 | 245 | 246 | button1 247 | 248 | 249 | 250 | 16 251 | 252 | 253 | 254 | button2 255 | 256 | 257 | 258 | 17 259 | 260 | 261 | 262 | button3 263 | 264 | 265 | 266 | 20 267 | 268 | 269 | 270 | button4 271 | 272 | 273 | 274 | 21 275 | 276 | 277 | 278 | button5 279 | 280 | 281 | 282 | 22 283 | 284 | 285 | 286 | main 287 | 288 | 289 | 290 | 23 291 | 292 | 293 | 294 | touchMenuItem: 295 | 296 | 297 | 7 298 | 299 | 24 300 | 301 | 302 | 303 | touchMenuItem: 304 | 305 | 306 | 7 307 | 308 | 25 309 | 310 | 311 | 312 | touchMenuItem: 313 | 314 | 315 | 7 316 | 317 | 26 318 | 319 | 320 | 321 | touchMenuItem: 322 | 323 | 324 | 7 325 | 326 | 27 327 | 328 | 329 | 330 | touchMenuItem: 331 | 332 | 333 | 7 334 | 335 | 28 336 | 337 | 338 | 339 | 340 | 341 | 0 342 | 343 | 344 | 345 | 346 | 347 | -1 348 | 349 | 350 | File's Owner 351 | 352 | 353 | -2 354 | 355 | 356 | 357 | 358 | 6 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 8 373 | 374 | 375 | 376 | 377 | 9 378 | 379 | 380 | 381 | 382 | 10 383 | 384 | 385 | 386 | 387 | 11 388 | 389 | 390 | 391 | 392 | 12 393 | 394 | 395 | 396 | 397 | 13 398 | 399 | 400 | 401 | 402 | 14 403 | 404 | 405 | 406 | 407 | 408 | 409 | ViewController 410 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 411 | UIResponder 412 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 413 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 414 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 415 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 416 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 417 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 418 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 419 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 420 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 421 | 422 | 423 | 424 | 425 | 426 | 28 427 | 428 | 429 | 430 | 431 | ViewController 432 | UIViewController 433 | 434 | touchMenuItem: 435 | id 436 | 437 | 438 | touchMenuItem: 439 | 440 | touchMenuItem: 441 | id 442 | 443 | 444 | 445 | UIButton 446 | UIButton 447 | UIButton 448 | UIButton 449 | UIButton 450 | UIButton 451 | 452 | 453 | 454 | button1 455 | UIButton 456 | 457 | 458 | button2 459 | UIButton 460 | 461 | 462 | button3 463 | UIButton 464 | 465 | 466 | button4 467 | UIButton 468 | 469 | 470 | button5 471 | UIButton 472 | 473 | 474 | main 475 | UIButton 476 | 477 | 478 | 479 | IBProjectSource 480 | ./Classes/ViewController.h 481 | 482 | 483 | 484 | 485 | 0 486 | IBCocoaTouchFramework 487 | YES 488 | 3 489 | 490 | {320, 480} 491 | {38, 38} 492 | {38, 38} 493 | {38, 38} 494 | {38, 38} 495 | {38, 38} 496 | {38, 38} 497 | 498 | 933 499 | 500 | 501 | --------------------------------------------------------------------------------