Compare commits
116 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
d48909d9c4 | |
|
|
71eb343abe | |
|
|
95f692c225 | |
|
|
42e62a4dbd | |
|
|
2ed9400c82 | |
|
|
06deaf308c | |
|
|
f3b60362da | |
|
|
9550d4719b | |
|
|
d088879c28 | |
|
|
5ef5a8d832 | |
|
|
0da57dfd53 | |
|
|
240684c788 | |
|
|
c6c729bb52 | |
|
|
7fb3ec03e9 | |
|
|
a9ca4b49b0 | |
|
|
363306a5c7 | |
|
|
4ce138d4e9 | |
|
|
43cb763d79 | |
|
|
8681050dd0 | |
|
|
98591515e6 | |
|
|
1a1b8523ec | |
|
|
3c1b09fe74 | |
|
|
6a9333e81b | |
|
|
07e14208be | |
|
|
22c03d987e | |
|
|
0e1ac70eeb | |
|
|
2cf2b31c62 | |
|
|
f9909b669f | |
|
|
792fb82d6b | |
|
|
eb2de83daf | |
|
|
2786733c82 | |
|
|
9d38ca4c76 | |
|
|
c2638e8935 | |
|
|
907eee38e8 | |
|
|
4c66f6c25c | |
|
|
810457bb73 | |
|
|
43f62e7321 | |
|
|
7dba83b832 | |
|
|
352a127909 | |
|
|
f2d50da1f6 | |
|
|
cf05a15b2f | |
|
|
5aa1fbcd94 | |
|
|
ffa26fba5b | |
|
|
81378731d9 | |
|
|
eca136202c | |
|
|
3513ce023a | |
|
|
da97baea8c | |
|
|
5cf9218a78 | |
|
|
f36d092d32 | |
|
|
705b9b9371 | |
|
|
437270ae30 | |
|
|
2a6be6a9fb | |
|
|
9e28dcbfb8 | |
|
|
1c341f78e0 | |
|
|
7a6dcf2d9d | |
|
|
136b1aecf0 | |
|
|
19f01241d8 | |
|
|
3aff93e08e | |
|
|
fd9a508323 | |
|
|
38f6bb528c | |
|
|
d1281e7361 | |
|
|
8095b8c58c | |
|
|
d72c99be3c | |
|
|
8939751726 | |
|
|
439a6d76aa | |
|
|
220512c37f | |
|
|
a718c6a097 | |
|
|
25e35c5742 | |
|
|
af932304ad | |
|
|
e04b5f806a | |
|
|
af6e1c33d5 | |
|
|
59cc5c3c7c | |
|
|
6c12a07f58 | |
|
|
c300cd5a34 | |
|
|
15619fd4c7 | |
|
|
31351393eb | |
|
|
8d331af74e | |
|
|
2b3be430f3 | |
|
|
8979fde62f | |
|
|
f789c52e33 | |
|
|
66f18ce28d | |
|
|
024169558f | |
|
|
835e8bedd1 | |
|
|
f1025d7792 | |
|
|
93b7afcfd8 | |
|
|
a759310b3b | |
|
|
373be13080 | |
|
|
7fa9e10b3e | |
|
|
d7ad0e1a34 | |
|
|
17c29fcdfa | |
|
|
534113d0b7 | |
|
|
f4c204c299 | |
|
|
2f58fb623e | |
|
|
66d17489ba | |
|
|
ccd27bff8f | |
|
|
b22ee4dbae | |
|
|
1aff5d7230 | |
|
|
bbdad1962a | |
|
|
6de900f6fb | |
|
|
6401379cd6 | |
|
|
fc827a9fd8 | |
|
|
3554c28b2f | |
|
|
812f9b5838 | |
|
|
f32edb7041 | |
|
|
df4fa9ec41 | |
|
|
48fc91164a | |
|
|
1b5b643ef3 | |
|
|
e5790197a3 | |
|
|
819f691982 | |
|
|
5a762de1e1 | |
|
|
fab2359f11 | |
|
|
a1005968a4 | |
|
|
06effba751 | |
|
|
1350104883 | |
|
|
751c850515 | |
|
|
3f9cbe0e00 |
168
README.md
168
README.md
|
|
@ -1,14 +1,31 @@
|
||||||
iOS-Slide-Menu
|
iOS-Slide-Menu
|
||||||
==============
|
---------
|
||||||
|
iOS Slide Menu built on top of UINavigationController, with configurable buttons, reveal animations, and tap/swiper gesture recognizers.
|
||||||
|
|
||||||
iOS Slide Menu built on top of UINavigationController.
|
- [Setup](https://github.com/aryaxt/iOS-Slide-Menu#setup)
|
||||||
|
- [Enable/Disable Left/Right Menu](https://github.com/aryaxt/iOS-Slide-Menu#configuring-left-and-right-menu-for-different-viewcontrollers)
|
||||||
|
- [Public Properties](https://github.com/aryaxt/iOS-Slide-Menu#public-properties)
|
||||||
|
- [Public Methods](https://github.com/aryaxt/iOS-Slide-Menu#public-methods)
|
||||||
|
- [Custom Animations](https://github.com/aryaxt/iOS-Slide-Menu#custom-animations)
|
||||||
|
- [Notifications](https://github.com/aryaxt/iOS-Slide-Menu#notifications)
|
||||||
|
|
||||||
Features:
|

|
||||||
- Righ Menu
|
|
||||||
- Left Menu
|
Version 1.4.0 Notes
|
||||||
- Configurable Buttons
|
---------
|
||||||
- Allows Enable/Disable menu by implmenting delegate methods
|
```switchToViewController:withCompletion:``` method has been deprecated. In order to get the exact same behavior use ```popToRootAndSwitchToViewController:withCompletion```
|
||||||
- Tap/Swipe gesture recognizer to Open/Close the Menus
|
|
||||||
|
New features:
|
||||||
|
- Allows limiting pan gesture to the sides of the view
|
||||||
|
- Allows turning shadow on/off
|
||||||
|
- Allows turning slide-out animation on/off when switching between viewControllers
|
||||||
|
- Minor bug fixes
|
||||||
|
|
||||||
|
Version 1.3.0 Notes
|
||||||
|
---------
|
||||||
|
If you are updating from previous versions you'll get compile errors, due to changes to RevealAnimations.
|
||||||
|
Animation configuration is now handled differently, and is separated from the SlideNavigationController.
|
||||||
|
Please see bwlow for more information.
|
||||||
|
|
||||||
Setup
|
Setup
|
||||||
---------
|
---------
|
||||||
|
|
@ -16,24 +33,18 @@ Setup
|
||||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||||
{
|
{
|
||||||
LeftMenuViewController *leftMenu = [[LeftMenuViewController alloc] init];
|
LeftMenuViewController *leftMenu = [[LeftMenuViewController alloc] init];
|
||||||
RightMenuViewController *righMenu = [[RightMenuViewController alloc] init];
|
RightMenuViewController *rightMenu = [[RightMenuViewController alloc] init];
|
||||||
|
|
||||||
[SlideNavigationController sharedInstance].righMenu = rightMenu;
|
[SlideNavigationController sharedInstance].rightMenu = rightMenu;
|
||||||
[SlideNavigationController sharedInstance].leftMenu = leftMenu;
|
[SlideNavigationController sharedInstance].leftMenu = leftMenu;
|
||||||
|
|
||||||
// Override point for customization after application launch.
|
// Override point for customization after application launch.
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Switch Between ViewControllers
|
|
||||||
----------
|
|
||||||
Let's say a menu item was selected
|
|
||||||
```
|
|
||||||
SomeViewController *vc = [[SomeViewController alloc] init];
|
|
||||||
[[SlideNavigationController sharedInstance] switchToViewController:vc withCompletion:nil];
|
|
||||||
```
|
|
||||||
Configuring Left and Right menu for different Viewcontrollers
|
Configuring Left and Right menu for different Viewcontrollers
|
||||||
---------
|
---------
|
||||||
|
You decide whether to enable or disable slide functionality on **each viewController** by implementing the following delegate methods of SlideNavigationControllerDelegate. These methods are optional, and if not implemented the menu functionality will be disabled for that particulat viewController.
|
||||||
```
|
```
|
||||||
@interface MyViewController : UIViewController <SlideNavigationControllerDelegate>
|
@interface MyViewController : UIViewController <SlideNavigationControllerDelegate>
|
||||||
@end
|
@end
|
||||||
|
|
@ -53,3 +64,126 @@ Configuring Left and Right menu for different Viewcontrollers
|
||||||
|
|
||||||
@end
|
@end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Public properties
|
||||||
|
---------
|
||||||
|
###### avoidSwitchingToSameClassViewController
|
||||||
|
Default value is set to YES.
|
||||||
|
If set to YES when switching to a new ViewController if the new viewcontroller is the same type as the current viewcontroller it'll close the menu instead of switching to the viewController.
|
||||||
|
|
||||||
|
If set to NO it'll switch to the viewController regardless of types
|
||||||
|
|
||||||
|
This can be usefull when you have a menu item, and when the user selects an already selected menu item you don't want to navigate to a new instance of the viewController
|
||||||
|
###### enableSwipeGesture
|
||||||
|
When set to YES user can swipe to open the menu
|
||||||
|
|
||||||
|
When set to NO swipe is disabled, and use can only open the menu using the UIBarButtonItem added to the navigationBar
|
||||||
|
######panGestureSideOffset
|
||||||
|
This property allows you to limit the gesture to the sides of the view. For instance setting this value to 50 means touches are limited to 50 pixels to the right and 50 pixels to the left of the view. This could be useful if you are expecting slide-to-delete functionality on UITableViews.
|
||||||
|
|
||||||
|
Default value of panGestureSideOffset is set to 0. Setting panGestureSideOffset to 0 means touches are detected in the whole view if enableSwipeGesture is set to true.
|
||||||
|
###### enableShadow
|
||||||
|
A boolean that allows you to turn shadow on/off. On default shadow is set to true
|
||||||
|
###### rightMenu
|
||||||
|
The viewController of the right menu in the navigationController
|
||||||
|
###### leftMenu
|
||||||
|
The viewController of the left menu in the navigationController
|
||||||
|
###### leftBarButtonItem
|
||||||
|
Default value is null. When this button is set navigationController uses this UIBarButtonItem as the leftItem. this property is intended to be used when a custom UIBarButton is needed (UIBarButtonItem initialized with a custom view)
|
||||||
|
###### rightBarButtonItem
|
||||||
|
Behaves exactly the same as leftbarButtonItem, but it's used as the right button for the menu
|
||||||
|
###### portraitSlideOffset
|
||||||
|
Default value of portraitSlideOffset is 60. This means when the menu is open, the width of the visible portion of the navigation controller is 60 pixels in portrait mode
|
||||||
|
###### landscapeSlideOffset
|
||||||
|
Default value of portraitSlideOffset is 60. This means when the menu is open, the width of the visible portion of the navigation controller is 60 pixels in landscape mode
|
||||||
|
###### menuRevealAnimationDuration
|
||||||
|
Default value of animation duration is .3, this property allows configuring animation duration
|
||||||
|
###### menuRevealAnimationOption
|
||||||
|
Defaults to UIViewAnimationOptionCurveEaseOut, you can change this property to configure animation options
|
||||||
|
###### menuRevealAnimator
|
||||||
|
menuRevealAnimator is used to animate the left/right menu during reveal. The default value is nil, that means no animations occure when opening/closing the menu.
|
||||||
|
|
||||||
|
There are existing animation classes that can be used. These animation classes can be configured through init method options.
|
||||||
|
|
||||||
|
- SlideNavigationContorllerAnimatorSlide
|
||||||
|
- SlideNavigationContorllerAnimatorFade
|
||||||
|
- SlideNavigationContorllerAnimatorScale
|
||||||
|
- SlideNavigationContorllerAnimatorScaleAndFade
|
||||||
|
- SlideNavigationContorllerAnimatorSlideAndFade
|
||||||
|
|
||||||
|
```
|
||||||
|
SlideNavigationContorllerAnimatorSlideAndFade *alideAndFadeAnimator = [[SlideNavigationContorllerAnimatorSlideAndFade alloc] initWithMaximumFadeAlpha:.8 fadeColor:[UIColor redColor] andSlideMovement:100];
|
||||||
|
[SlideNavigationController sharedInstance].menuRevealAnimator = alideAndFadeAnimator;
|
||||||
|
```
|
||||||
|
Public Methods
|
||||||
|
---------
|
||||||
|
###### + (SlideNavigationController *)sharedInstance;
|
||||||
|
Returns the singleton instance of SlideNavigationController
|
||||||
|
|
||||||
|
###### - (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;
|
||||||
|
This method is deprecated
|
||||||
|
|
||||||
|
###### - (void)popToRootAndSwitchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;
|
||||||
|
Pops to root view controller and calls the completion.
|
||||||
|
|
||||||
|
###### - (void)popToRootAndSwitchToViewController:(UIViewController *)viewController withSlideOutAnimation:(BOOL)slideOutAnimation andCompletion:(void (^)())completion;
|
||||||
|
Similar to previous method, but allows turning on/off slide-out-animation during the switch
|
||||||
|
|
||||||
|
###### - (void)popAllAndSwitchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;
|
||||||
|
Replaces the ViewController stack with a new stack that includes the new ViewController, and calls completion
|
||||||
|
|
||||||
|
###### - (void)popAllAndSwitchToViewController:(UIViewController *)viewController withSlideOutAnimation:(BOOL)slideOutAnimation andCompletion:(void (^)())completion;
|
||||||
|
Similar to previous method, but allows turning on/off slide-out-animation during the switch
|
||||||
|
|
||||||
|
###### - (void)openMenu:(Menu)menu withCompletion:(void (^)())completion;
|
||||||
|
Opens a given menu and calls the completion block oppon animation completion
|
||||||
|
|
||||||
|
###### - (void)closeMenuWithCompletion:(void (^)())completion;
|
||||||
|
Closes the menu and calls the completion block oppon animation completion
|
||||||
|
|
||||||
|
###### - (void)toggleLeftMenu;
|
||||||
|
Toggles the left menu open or close depending on the existing state. This was made public in order to pass the selector to a custom UIBarButtonItem (ex: UIBarButtonItem with a button as a custom view)
|
||||||
|
|
||||||
|
```
|
||||||
|
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
|
||||||
|
[button setImage:[UIImage imageNamed:@"menu-button"] forState:UIControlStateNormal];
|
||||||
|
[button addTarget:[SlideNavigationController sharedInstance] action:@selector(toggleRightMenu) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
|
||||||
|
[SlideNavigationController sharedInstance].rightBarButtonItem = rightBarButtonItem;
|
||||||
|
```
|
||||||
|
|
||||||
|
###### - (void)bounceMenu:(Menu)menu withCompletion:(void (^)())completion;
|
||||||
|
Bounces either right or left menu, and calls the completion block oppon animation completion
|
||||||
|
###### - (void)toggleRightMenu;
|
||||||
|
Works exactly the same as toggleLeftMenu, but used to toggle left menu
|
||||||
|
|
||||||
|
###### - (BOOL)isMenuOpen;
|
||||||
|
Returns a boolean stating whether the menu is open or not
|
||||||
|
|
||||||
|
Custom Animations
|
||||||
|
---------
|
||||||
|
SlideNavigationController allows custom reveal animations. In order to add custom animations create a new class implementing SlideNavigationContorllerAnimator protocol. For more information take a look at the existing animation classes.
|
||||||
|
|
||||||
|
###### - (void)prepareMenuForAnimation:(Menu)menu;
|
||||||
|
This method gets called right before the menu is about to reveal
|
||||||
|
###### - (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress;
|
||||||
|
This method gets called as the menu reveal occurs, and passes the progress to be used for animations(progress is between 0 and 1)
|
||||||
|
###### - (void)clear;
|
||||||
|
This method gets called if for any resons the instance of animator is being changed. For instance, the animator is changed from SlideNavigationContorllerAnimatorFade to SlideNavigationContorllerAnimatorSlide. In this method you should cleanup the state of the menu if neede. For instance if you added a view to the menu for reveal animation, you should remove it when clear gets called.
|
||||||
|
Public Methods
|
||||||
|
|
||||||
|
Notifications
|
||||||
|
---------
|
||||||
|
###### SlideNavigationControllerDidOpen
|
||||||
|
This notification is posted EVERY time the menu goes inot a complete open state
|
||||||
|
Userinfo contains a value with key "menu", which could have 2 values "left" and "right"
|
||||||
|
|
||||||
|
###### SlideNavigationControllerDidClose
|
||||||
|
This notification is posted EVERY time the menu goes inot a complete close state
|
||||||
|
Userinfo contains a value with key "menu", which could have 2 values "left" and "right"
|
||||||
|
|
||||||
|
###### SlideNavigationControllerDidReveal
|
||||||
|
This notification is posted once everytim a menu reveals
|
||||||
|
Userinfo contains a value with key "menu", which could have 2 values "left" and "right"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,19 +18,29 @@
|
||||||
15371EF91728E3B400A508F4 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 15371EF81728E3B400A508F4 /* Default-568h@2x.png */; };
|
15371EF91728E3B400A508F4 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 15371EF81728E3B400A508F4 /* Default-568h@2x.png */; };
|
||||||
15371EFC1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 15371EFA1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard */; };
|
15371EFC1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 15371EFA1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard */; };
|
||||||
15371EFF1728E3B400A508F4 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 15371EFD1728E3B400A508F4 /* MainStoryboard_iPad.storyboard */; };
|
15371EFF1728E3B400A508F4 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 15371EFD1728E3B400A508F4 /* MainStoryboard_iPad.storyboard */; };
|
||||||
15371F0A1728E3B400A508F4 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371F091728E3B400A508F4 /* SenTestingKit.framework */; };
|
|
||||||
15371F0B1728E3B400A508F4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371EE21728E3B400A508F4 /* UIKit.framework */; };
|
15371F0B1728E3B400A508F4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371EE21728E3B400A508F4 /* UIKit.framework */; };
|
||||||
15371F0C1728E3B400A508F4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371EE41728E3B400A508F4 /* Foundation.framework */; };
|
15371F0C1728E3B400A508F4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15371EE41728E3B400A508F4 /* Foundation.framework */; };
|
||||||
15371F141728E3B400A508F4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 15371F121728E3B400A508F4 /* InfoPlist.strings */; };
|
15371F141728E3B400A508F4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 15371F121728E3B400A508F4 /* InfoPlist.strings */; };
|
||||||
15371F171728E3B400A508F4 /* SlideMenuTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F161728E3B400A508F4 /* SlideMenuTests.m */; };
|
15371F171728E3B400A508F4 /* SlideMenuTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F161728E3B400A508F4 /* SlideMenuTests.m */; };
|
||||||
15371F281728E44E00A508F4 /* SlideNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F271728E44E00A508F4 /* SlideNavigationController.m */; };
|
15371F281728E44E00A508F4 /* SlideNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15371F271728E44E00A508F4 /* SlideNavigationController.m */; };
|
||||||
|
15C9AC111895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C9AC101895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.m */; };
|
||||||
|
15C9AC141895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C9AC131895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.m */; };
|
||||||
|
15C9AC171895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C9AC161895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.m */; };
|
||||||
|
15C9AC1A1895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C9AC191895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.m */; };
|
||||||
|
15C9AC1D1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C9AC1C1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.m */; };
|
||||||
15CBD67C172A15F900F0C53E /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD677172A15F900F0C53E /* HomeViewController.m */; };
|
15CBD67C172A15F900F0C53E /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD677172A15F900F0C53E /* HomeViewController.m */; };
|
||||||
15CBD67D172A15F900F0C53E /* MenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD679172A15F900F0C53E /* MenuViewController.m */; };
|
15CBD67D172A15F900F0C53E /* LeftMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD679172A15F900F0C53E /* LeftMenuViewController.m */; };
|
||||||
15CBD67E172A15F900F0C53E /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD67B172A15F900F0C53E /* ProfileViewController.m */; };
|
15CBD67E172A15F900F0C53E /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD67B172A15F900F0C53E /* ProfileViewController.m */; };
|
||||||
15CBD689172A22B700F0C53E /* ProfileDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD688172A22B700F0C53E /* ProfileDetailViewController.m */; };
|
15CBD689172A22B700F0C53E /* ProfileDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CBD688172A22B700F0C53E /* ProfileDetailViewController.m */; };
|
||||||
15CBD699172A57F100F0C53E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15CBD698172A57F100F0C53E /* QuartzCore.framework */; };
|
15CBD699172A57F100F0C53E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15CBD698172A57F100F0C53E /* QuartzCore.framework */; };
|
||||||
15CBD6BE172BBB3600F0C53E /* menu-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 15CBD6BD172BBB3600F0C53E /* menu-button@2x.png */; };
|
15CBD6BE172BBB3600F0C53E /* menu-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 15CBD6BD172BBB3600F0C53E /* menu-button@2x.png */; };
|
||||||
15CBD6C0172BBB7100F0C53E /* menu-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 15CBD6BF172BBB7100F0C53E /* menu-button.png */; };
|
15CBD6C0172BBB7100F0C53E /* menu-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 15CBD6BF172BBB7100F0C53E /* menu-button.png */; };
|
||||||
|
15E7D318190C24E3002EAE3F /* RightMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15E7D317190C24E3002EAE3F /* RightMenuViewController.m */; };
|
||||||
|
15E7D31B190C289E002EAE3F /* animation.png in Resources */ = {isa = PBXBuildFile; fileRef = 15E7D31A190C289E002EAE3F /* animation.png */; };
|
||||||
|
15E7D31F190C33A5002EAE3F /* leftMenu.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 15E7D31D190C33A5002EAE3F /* leftMenu.jpg */; };
|
||||||
|
15E7D321190C3B75002EAE3F /* rightMenu.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 15E7D320190C3B75002EAE3F /* rightMenu.jpg */; };
|
||||||
|
15E7D327190C3DAE002EAE3F /* gear.png in Resources */ = {isa = PBXBuildFile; fileRef = 15E7D326190C3DAE002EAE3F /* gear.png */; };
|
||||||
|
997929E2187336AA00716C77 /* FriendsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 997929E1187336AA00716C77 /* FriendsViewController.m */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
|
@ -59,18 +69,28 @@
|
||||||
15371EF81728E3B400A508F4 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
|
15371EF81728E3B400A508F4 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
|
||||||
15371EFB1728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = "<group>"; };
|
15371EFB1728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = "<group>"; };
|
||||||
15371EFE1728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = "<group>"; };
|
15371EFE1728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = "<group>"; };
|
||||||
15371F081728E3B400A508F4 /* SlideMenuTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideMenuTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
|
15371F081728E3B400A508F4 /* SlideMenuTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideMenuTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
15371F091728E3B400A508F4 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
|
|
||||||
15371F111728E3B400A508F4 /* SlideMenuTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SlideMenuTests-Info.plist"; sourceTree = "<group>"; };
|
15371F111728E3B400A508F4 /* SlideMenuTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SlideMenuTests-Info.plist"; sourceTree = "<group>"; };
|
||||||
15371F131728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
15371F131728E3B400A508F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
15371F151728E3B400A508F4 /* SlideMenuTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlideMenuTests.h; sourceTree = "<group>"; };
|
15371F151728E3B400A508F4 /* SlideMenuTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlideMenuTests.h; sourceTree = "<group>"; };
|
||||||
15371F161728E3B400A508F4 /* SlideMenuTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlideMenuTests.m; sourceTree = "<group>"; };
|
15371F161728E3B400A508F4 /* SlideMenuTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlideMenuTests.m; sourceTree = "<group>"; };
|
||||||
15371F261728E44E00A508F4 /* SlideNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationController.h; sourceTree = "<group>"; };
|
15371F261728E44E00A508F4 /* SlideNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationController.h; sourceTree = "<group>"; };
|
||||||
15371F271728E44E00A508F4 /* SlideNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationController.m; sourceTree = "<group>"; };
|
15371F271728E44E00A508F4 /* SlideNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationController.m; sourceTree = "<group>"; };
|
||||||
|
15C9AC0F1895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationContorllerAnimatorSlide.h; sourceTree = "<group>"; };
|
||||||
|
15C9AC101895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationContorllerAnimatorSlide.m; sourceTree = "<group>"; };
|
||||||
|
15C9AC121895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationContorllerAnimatorFade.h; sourceTree = "<group>"; };
|
||||||
|
15C9AC131895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationContorllerAnimatorFade.m; sourceTree = "<group>"; };
|
||||||
|
15C9AC151895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationContorllerAnimatorSlideAndFade.h; sourceTree = "<group>"; };
|
||||||
|
15C9AC161895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationContorllerAnimatorSlideAndFade.m; sourceTree = "<group>"; };
|
||||||
|
15C9AC181895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationContorllerAnimatorScale.h; sourceTree = "<group>"; };
|
||||||
|
15C9AC191895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationContorllerAnimatorScale.m; sourceTree = "<group>"; };
|
||||||
|
15C9AC1B1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationContorllerAnimatorScaleAndFade.h; sourceTree = "<group>"; };
|
||||||
|
15C9AC1C1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlideNavigationContorllerAnimatorScaleAndFade.m; sourceTree = "<group>"; };
|
||||||
|
15C9AC1E1895A832006E6F27 /* SlideNavigationContorllerAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideNavigationContorllerAnimator.h; sourceTree = "<group>"; };
|
||||||
15CBD676172A15F900F0C53E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
|
15CBD676172A15F900F0C53E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
|
||||||
15CBD677172A15F900F0C53E /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; };
|
15CBD677172A15F900F0C53E /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; };
|
||||||
15CBD678172A15F900F0C53E /* MenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuViewController.h; sourceTree = "<group>"; };
|
15CBD678172A15F900F0C53E /* LeftMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeftMenuViewController.h; sourceTree = "<group>"; };
|
||||||
15CBD679172A15F900F0C53E /* MenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuViewController.m; sourceTree = "<group>"; };
|
15CBD679172A15F900F0C53E /* LeftMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeftMenuViewController.m; sourceTree = "<group>"; };
|
||||||
15CBD67A172A15F900F0C53E /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = "<group>"; };
|
15CBD67A172A15F900F0C53E /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = "<group>"; };
|
||||||
15CBD67B172A15F900F0C53E /* ProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = "<group>"; };
|
15CBD67B172A15F900F0C53E /* ProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = "<group>"; };
|
||||||
15CBD687172A22B600F0C53E /* ProfileDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileDetailViewController.h; sourceTree = "<group>"; };
|
15CBD687172A22B600F0C53E /* ProfileDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileDetailViewController.h; sourceTree = "<group>"; };
|
||||||
|
|
@ -78,6 +98,14 @@
|
||||||
15CBD698172A57F100F0C53E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
15CBD698172A57F100F0C53E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||||
15CBD6BD172BBB3600F0C53E /* menu-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-button@2x.png"; sourceTree = "<group>"; };
|
15CBD6BD172BBB3600F0C53E /* menu-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-button@2x.png"; sourceTree = "<group>"; };
|
||||||
15CBD6BF172BBB7100F0C53E /* menu-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-button.png"; sourceTree = "<group>"; };
|
15CBD6BF172BBB7100F0C53E /* menu-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-button.png"; sourceTree = "<group>"; };
|
||||||
|
15E7D316190C24E3002EAE3F /* RightMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RightMenuViewController.h; sourceTree = "<group>"; };
|
||||||
|
15E7D317190C24E3002EAE3F /* RightMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RightMenuViewController.m; sourceTree = "<group>"; };
|
||||||
|
15E7D31A190C289E002EAE3F /* animation.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = animation.png; sourceTree = "<group>"; };
|
||||||
|
15E7D31D190C33A5002EAE3F /* leftMenu.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = leftMenu.jpg; sourceTree = "<group>"; };
|
||||||
|
15E7D320190C3B75002EAE3F /* rightMenu.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = rightMenu.jpg; sourceTree = "<group>"; };
|
||||||
|
15E7D326190C3DAE002EAE3F /* gear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gear.png; sourceTree = "<group>"; };
|
||||||
|
997929E0187336AA00716C77 /* FriendsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FriendsViewController.h; sourceTree = "<group>"; };
|
||||||
|
997929E1187336AA00716C77 /* FriendsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FriendsViewController.m; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
|
@ -96,7 +124,6 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
15371F0A1728E3B400A508F4 /* SenTestingKit.framework in Frameworks */,
|
|
||||||
15371F0B1728E3B400A508F4 /* UIKit.framework in Frameworks */,
|
15371F0B1728E3B400A508F4 /* UIKit.framework in Frameworks */,
|
||||||
15371F0C1728E3B400A508F4 /* Foundation.framework in Frameworks */,
|
15371F0C1728E3B400A508F4 /* Foundation.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
|
|
@ -119,7 +146,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
15371EDE1728E3B400A508F4 /* SlideMenu.app */,
|
15371EDE1728E3B400A508F4 /* SlideMenu.app */,
|
||||||
15371F081728E3B400A508F4 /* SlideMenuTests.octest */,
|
15371F081728E3B400A508F4 /* SlideMenuTests.xctest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -131,7 +158,6 @@
|
||||||
15371EE21728E3B400A508F4 /* UIKit.framework */,
|
15371EE21728E3B400A508F4 /* UIKit.framework */,
|
||||||
15371EE41728E3B400A508F4 /* Foundation.framework */,
|
15371EE41728E3B400A508F4 /* Foundation.framework */,
|
||||||
15371EE61728E3B400A508F4 /* CoreGraphics.framework */,
|
15371EE61728E3B400A508F4 /* CoreGraphics.framework */,
|
||||||
15371F091728E3B400A508F4 /* SenTestingKit.framework */,
|
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -139,6 +165,7 @@
|
||||||
15371EE81728E3B400A508F4 /* SlideMenu */ = {
|
15371EE81728E3B400A508F4 /* SlideMenu */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
15E7D319190C2894002EAE3F /* Images */,
|
||||||
15CBD675172A15F900F0C53E /* Helper Classes */,
|
15CBD675172A15F900F0C53E /* Helper Classes */,
|
||||||
15371F241728E43600A508F4 /* Source */,
|
15371F241728E43600A508F4 /* Source */,
|
||||||
15371EF11728E3B400A508F4 /* AppDelegate.h */,
|
15371EF11728E3B400A508F4 /* AppDelegate.h */,
|
||||||
|
|
@ -186,6 +213,7 @@
|
||||||
15371F241728E43600A508F4 /* Source */ = {
|
15371F241728E43600A508F4 /* Source */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
15C9AC0E1895A79A006E6F27 /* Animations */,
|
||||||
15CBD681172A209500F0C53E /* Assets */,
|
15CBD681172A209500F0C53E /* Assets */,
|
||||||
15371F261728E44E00A508F4 /* SlideNavigationController.h */,
|
15371F261728E44E00A508F4 /* SlideNavigationController.h */,
|
||||||
15371F271728E44E00A508F4 /* SlideNavigationController.m */,
|
15371F271728E44E00A508F4 /* SlideNavigationController.m */,
|
||||||
|
|
@ -193,13 +221,35 @@
|
||||||
path = Source;
|
path = Source;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
15C9AC0E1895A79A006E6F27 /* Animations */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
15C9AC0F1895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.h */,
|
||||||
|
15C9AC101895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.m */,
|
||||||
|
15C9AC121895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.h */,
|
||||||
|
15C9AC131895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.m */,
|
||||||
|
15C9AC151895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.h */,
|
||||||
|
15C9AC161895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.m */,
|
||||||
|
15C9AC181895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.h */,
|
||||||
|
15C9AC191895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.m */,
|
||||||
|
15C9AC1B1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.h */,
|
||||||
|
15C9AC1C1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.m */,
|
||||||
|
15C9AC1E1895A832006E6F27 /* SlideNavigationContorllerAnimator.h */,
|
||||||
|
);
|
||||||
|
path = Animations;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
15CBD675172A15F900F0C53E /* Helper Classes */ = {
|
15CBD675172A15F900F0C53E /* Helper Classes */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
15CBD678172A15F900F0C53E /* LeftMenuViewController.h */,
|
||||||
|
15CBD679172A15F900F0C53E /* LeftMenuViewController.m */,
|
||||||
|
15E7D316190C24E3002EAE3F /* RightMenuViewController.h */,
|
||||||
|
15E7D317190C24E3002EAE3F /* RightMenuViewController.m */,
|
||||||
15CBD676172A15F900F0C53E /* HomeViewController.h */,
|
15CBD676172A15F900F0C53E /* HomeViewController.h */,
|
||||||
15CBD677172A15F900F0C53E /* HomeViewController.m */,
|
15CBD677172A15F900F0C53E /* HomeViewController.m */,
|
||||||
15CBD678172A15F900F0C53E /* MenuViewController.h */,
|
997929E0187336AA00716C77 /* FriendsViewController.h */,
|
||||||
15CBD679172A15F900F0C53E /* MenuViewController.m */,
|
997929E1187336AA00716C77 /* FriendsViewController.m */,
|
||||||
15CBD67A172A15F900F0C53E /* ProfileViewController.h */,
|
15CBD67A172A15F900F0C53E /* ProfileViewController.h */,
|
||||||
15CBD67B172A15F900F0C53E /* ProfileViewController.m */,
|
15CBD67B172A15F900F0C53E /* ProfileViewController.m */,
|
||||||
15CBD687172A22B600F0C53E /* ProfileDetailViewController.h */,
|
15CBD687172A22B600F0C53E /* ProfileDetailViewController.h */,
|
||||||
|
|
@ -217,6 +267,17 @@
|
||||||
path = Assets;
|
path = Assets;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
15E7D319190C2894002EAE3F /* Images */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
15E7D326190C3DAE002EAE3F /* gear.png */,
|
||||||
|
15E7D320190C3B75002EAE3F /* rightMenu.jpg */,
|
||||||
|
15E7D31D190C33A5002EAE3F /* leftMenu.jpg */,
|
||||||
|
15E7D31A190C289E002EAE3F /* animation.png */,
|
||||||
|
);
|
||||||
|
path = Images;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
|
|
@ -253,8 +314,8 @@
|
||||||
);
|
);
|
||||||
name = SlideMenuTests;
|
name = SlideMenuTests;
|
||||||
productName = SlideMenuTests;
|
productName = SlideMenuTests;
|
||||||
productReference = 15371F081728E3B400A508F4 /* SlideMenuTests.octest */;
|
productReference = 15371F081728E3B400A508F4 /* SlideMenuTests.xctest */;
|
||||||
productType = "com.apple.product-type.bundle";
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
|
@ -262,7 +323,8 @@
|
||||||
15371ED51728E3B400A508F4 /* Project object */ = {
|
15371ED51728E3B400A508F4 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0450;
|
LastTestingUpgradeCheck = 0600;
|
||||||
|
LastUpgradeCheck = 0500;
|
||||||
ORGANIZATIONNAME = "Aryan Ghassemi";
|
ORGANIZATIONNAME = "Aryan Ghassemi";
|
||||||
};
|
};
|
||||||
buildConfigurationList = 15371ED81728E3B400A508F4 /* Build configuration list for PBXProject "SlideMenu" */;
|
buildConfigurationList = 15371ED81728E3B400A508F4 /* Build configuration list for PBXProject "SlideMenu" */;
|
||||||
|
|
@ -289,9 +351,13 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
15371EED1728E3B400A508F4 /* InfoPlist.strings in Resources */,
|
15371EED1728E3B400A508F4 /* InfoPlist.strings in Resources */,
|
||||||
|
15E7D321190C3B75002EAE3F /* rightMenu.jpg in Resources */,
|
||||||
|
15E7D327190C3DAE002EAE3F /* gear.png in Resources */,
|
||||||
15371EF51728E3B400A508F4 /* Default.png in Resources */,
|
15371EF51728E3B400A508F4 /* Default.png in Resources */,
|
||||||
15371EF71728E3B400A508F4 /* Default@2x.png in Resources */,
|
15371EF71728E3B400A508F4 /* Default@2x.png in Resources */,
|
||||||
|
15E7D31F190C33A5002EAE3F /* leftMenu.jpg in Resources */,
|
||||||
15371EF91728E3B400A508F4 /* Default-568h@2x.png in Resources */,
|
15371EF91728E3B400A508F4 /* Default-568h@2x.png in Resources */,
|
||||||
|
15E7D31B190C289E002EAE3F /* animation.png in Resources */,
|
||||||
15371EFC1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard in Resources */,
|
15371EFC1728E3B400A508F4 /* MainStoryboard_iPhone.storyboard in Resources */,
|
||||||
15371EFF1728E3B400A508F4 /* MainStoryboard_iPad.storyboard in Resources */,
|
15371EFF1728E3B400A508F4 /* MainStoryboard_iPad.storyboard in Resources */,
|
||||||
15CBD6BE172BBB3600F0C53E /* menu-button@2x.png in Resources */,
|
15CBD6BE172BBB3600F0C53E /* menu-button@2x.png in Resources */,
|
||||||
|
|
@ -330,11 +396,18 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
15E7D318190C24E3002EAE3F /* RightMenuViewController.m in Sources */,
|
||||||
|
15C9AC1D1895A81D006E6F27 /* SlideNavigationContorllerAnimatorScaleAndFade.m in Sources */,
|
||||||
|
15C9AC171895A7E7006E6F27 /* SlideNavigationContorllerAnimatorSlideAndFade.m in Sources */,
|
||||||
15371EEF1728E3B400A508F4 /* main.m in Sources */,
|
15371EEF1728E3B400A508F4 /* main.m in Sources */,
|
||||||
15371EF31728E3B400A508F4 /* AppDelegate.m in Sources */,
|
15371EF31728E3B400A508F4 /* AppDelegate.m in Sources */,
|
||||||
|
15C9AC141895A7D7006E6F27 /* SlideNavigationContorllerAnimatorFade.m in Sources */,
|
||||||
15371F281728E44E00A508F4 /* SlideNavigationController.m in Sources */,
|
15371F281728E44E00A508F4 /* SlideNavigationController.m in Sources */,
|
||||||
|
15C9AC111895A7BF006E6F27 /* SlideNavigationContorllerAnimatorSlide.m in Sources */,
|
||||||
15CBD67C172A15F900F0C53E /* HomeViewController.m in Sources */,
|
15CBD67C172A15F900F0C53E /* HomeViewController.m in Sources */,
|
||||||
15CBD67D172A15F900F0C53E /* MenuViewController.m in Sources */,
|
997929E2187336AA00716C77 /* FriendsViewController.m in Sources */,
|
||||||
|
15CBD67D172A15F900F0C53E /* LeftMenuViewController.m in Sources */,
|
||||||
|
15C9AC1A1895A80E006E6F27 /* SlideNavigationContorllerAnimatorScale.m in Sources */,
|
||||||
15CBD67E172A15F900F0C53E /* ProfileViewController.m in Sources */,
|
15CBD67E172A15F900F0C53E /* ProfileViewController.m in Sources */,
|
||||||
15CBD689172A22B700F0C53E /* ProfileDetailViewController.m in Sources */,
|
15CBD689172A22B700F0C53E /* ProfileDetailViewController.m in Sources */,
|
||||||
);
|
);
|
||||||
|
|
@ -417,6 +490,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
|
|
@ -451,6 +525,7 @@
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
||||||
INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist";
|
INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
|
|
@ -462,6 +537,7 @@
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
||||||
INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist";
|
INFOPLIST_FILE = "SlideMenu/SlideMenu-Info.plist";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
|
|
@ -474,13 +550,13 @@
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"\"$(SDKROOT)/Developer/Library/Frameworks\"",
|
"\"$(SDKROOT)/Developer/Library/Frameworks\"",
|
||||||
"\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"",
|
"\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"",
|
||||||
|
"$(inherited)",
|
||||||
);
|
);
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
||||||
INFOPLIST_FILE = "SlideMenuTests/SlideMenuTests-Info.plist";
|
INFOPLIST_FILE = "SlideMenuTests/SlideMenuTests-Info.plist";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||||
WRAPPER_EXTENSION = octest;
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
|
@ -491,13 +567,13 @@
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"\"$(SDKROOT)/Developer/Library/Frameworks\"",
|
"\"$(SDKROOT)/Developer/Library/Frameworks\"",
|
||||||
"\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"",
|
"\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"",
|
||||||
|
"$(inherited)",
|
||||||
);
|
);
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
GCC_PREFIX_HEADER = "SlideMenu/SlideMenu-Prefix.pch";
|
||||||
INFOPLIST_FILE = "SlideMenuTests/SlideMenuTests-Info.plist";
|
INFOPLIST_FILE = "SlideMenuTests/SlideMenuTests-Info.plist";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||||
WRAPPER_EXTENSION = octest;
|
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import "SlideNavigationController.h"
|
#import "SlideNavigationController.h"
|
||||||
#import "MenuViewController.h"
|
#import "LeftMenuViewController.h"
|
||||||
|
#import "RightMenuViewController.h"
|
||||||
|
|
||||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,18 +15,43 @@
|
||||||
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
|
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
|
||||||
bundle: nil];
|
bundle: nil];
|
||||||
|
|
||||||
MenuViewController *rightMenu = (MenuViewController*)[mainStoryboard
|
LeftMenuViewController *leftMenu = (LeftMenuViewController*)[mainStoryboard
|
||||||
instantiateViewControllerWithIdentifier: @"MenuViewController"];
|
instantiateViewControllerWithIdentifier: @"LeftMenuViewController"];
|
||||||
rightMenu.view.backgroundColor = [UIColor yellowColor];
|
|
||||||
rightMenu.cellIdentifier = @"rightMenuCell";
|
|
||||||
|
|
||||||
MenuViewController *leftMenu = (MenuViewController*)[mainStoryboard
|
RightMenuViewController *rightMenu = (RightMenuViewController*)[mainStoryboard
|
||||||
instantiateViewControllerWithIdentifier: @"MenuViewController"];
|
instantiateViewControllerWithIdentifier: @"RightMenuViewController"];
|
||||||
leftMenu.view.backgroundColor = [UIColor lightGrayColor];
|
|
||||||
leftMenu.cellIdentifier = @"leftMenuCell";
|
|
||||||
|
|
||||||
[SlideNavigationController sharedInstance].righMenu = rightMenu;
|
[SlideNavigationController sharedInstance].rightMenu = rightMenu;
|
||||||
[SlideNavigationController sharedInstance].leftMenu = leftMenu;
|
[SlideNavigationController sharedInstance].leftMenu = leftMenu;
|
||||||
|
[SlideNavigationController sharedInstance].menuRevealAnimationDuration = .18;
|
||||||
|
|
||||||
|
// Creating a custom bar button for right menu
|
||||||
|
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
|
||||||
|
[button setImage:[UIImage imageNamed:@"gear"] forState:UIControlStateNormal];
|
||||||
|
[button addTarget:[SlideNavigationController sharedInstance] action:@selector(toggleRightMenu) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
|
||||||
|
[SlideNavigationController sharedInstance].rightBarButtonItem = rightBarButtonItem;
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerDidClose object:nil queue:nil usingBlock:^(NSNotification *note) {
|
||||||
|
NSString *menu = note.userInfo[@"menu"];
|
||||||
|
NSLog(@"Closed %@", menu);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerDidOpen object:nil queue:nil usingBlock:^(NSNotification *note) {
|
||||||
|
NSString *menu = note.userInfo[@"menu"];
|
||||||
|
NSLog(@"Opened %@", menu);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerWillOpen object:nil queue:nil usingBlock:^(NSNotification *note) {
|
||||||
|
NSString *menu = note.userInfo[@"menu"];
|
||||||
|
NSLog(@"Opening %@", menu);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:SlideNavigationControllerDidReveal object:nil queue:nil usingBlock:^(NSNotification *note) {
|
||||||
|
NSString *menu = note.userInfo[@"menu"];
|
||||||
|
NSLog(@"Revealed %@", menu);
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
// Override point for customization after application launch.
|
// Override point for customization after application launch.
|
||||||
return YES;
|
return YES;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
//
|
||||||
|
// FriendsViewController.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Ghassemi on 12/31/13.
|
||||||
|
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "SlideNavigationController.h"
|
||||||
|
|
||||||
|
@interface FriendsViewController : UITableViewController <SlideNavigationControllerDelegate>
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
//
|
||||||
|
// FriendsViewController.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Ghassemi on 12/31/13.
|
||||||
|
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "FriendsViewController.h"
|
||||||
|
|
||||||
|
@implementation FriendsViewController
|
||||||
|
|
||||||
|
- (void)viewDidLoad
|
||||||
|
{
|
||||||
|
[super viewDidLoad];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)slideNavigationControllerShouldDisplayLeftMenu
|
||||||
|
{
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friendCell"];
|
||||||
|
cell.textLabel.text = [NSString stringWithFormat:@"Friend %ld", (long)indexPath.row];
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -11,4 +11,21 @@
|
||||||
|
|
||||||
@interface HomeViewController : UIViewController <SlideNavigationControllerDelegate>
|
@interface HomeViewController : UIViewController <SlideNavigationControllerDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, strong) IBOutlet UISwitch *limitPanGestureSwitch;
|
||||||
|
@property (nonatomic, strong) IBOutlet UISwitch *slideOutAnimationSwitch;
|
||||||
|
@property (nonatomic, strong) IBOutlet UISwitch *shadowSwitch;
|
||||||
|
@property (nonatomic, strong) IBOutlet UISwitch *panGestureSwitch;
|
||||||
|
@property (nonatomic, strong) IBOutlet UISegmentedControl *portraitSlideOffsetSegment;
|
||||||
|
@property (nonatomic, strong) IBOutlet UISegmentedControl *landscapeSlideOffsetSegment;
|
||||||
|
@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
|
||||||
|
|
||||||
|
- (IBAction)bounceMenu:(id)sender;
|
||||||
|
- (IBAction)slideOutAnimationSwitchChanged:(id)sender;
|
||||||
|
- (IBAction)limitPanGestureSwitchChanged:(id)sender;
|
||||||
|
- (IBAction)changeAnimationSelected:(id)sender;
|
||||||
|
- (IBAction)shadowSwitchSelected:(id)sender;
|
||||||
|
- (IBAction)enablePanGestureSelected:(id)sender;
|
||||||
|
- (IBAction)portraitSlideOffsetChanged:(id)sender;
|
||||||
|
- (IBAction)landscapeSlideOffsetChanged:(id)sender;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,21 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "HomeViewController.h"
|
#import "HomeViewController.h"
|
||||||
|
#import "LeftMenuViewController.h"
|
||||||
|
|
||||||
@implementation HomeViewController
|
@implementation HomeViewController
|
||||||
|
|
||||||
- (void)viewDidLoad
|
- (void)viewDidLoad
|
||||||
{
|
{
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
|
|
||||||
|
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 503);
|
||||||
|
self.portraitSlideOffsetSegment.selectedSegmentIndex = [self indexFromPixels:[SlideNavigationController sharedInstance].portraitSlideOffset];
|
||||||
|
self.landscapeSlideOffsetSegment.selectedSegmentIndex = [self indexFromPixels:[SlideNavigationController sharedInstance].landscapeSlideOffset];
|
||||||
|
self.panGestureSwitch.on = [SlideNavigationController sharedInstance].enableSwipeGesture;
|
||||||
|
self.shadowSwitch.on = [SlideNavigationController sharedInstance].enableShadow;
|
||||||
|
self.limitPanGestureSwitch.on = ([SlideNavigationController sharedInstance].panGestureSideOffset == 0) ? NO : YES;
|
||||||
|
self.slideOutAnimationSwitch.on = ((LeftMenuViewController *)[SlideNavigationController sharedInstance].leftMenu).slideOutAnimationEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - SlideNavigationController Methods -
|
#pragma mark - SlideNavigationController Methods -
|
||||||
|
|
@ -27,4 +36,80 @@
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - IBActions -
|
||||||
|
|
||||||
|
- (IBAction)bounceMenu:(id)sender
|
||||||
|
{
|
||||||
|
static Menu menu = MenuLeft;
|
||||||
|
|
||||||
|
[[SlideNavigationController sharedInstance] bounceMenu:menu withCompletion:nil];
|
||||||
|
|
||||||
|
menu = (menu == MenuLeft) ? MenuRight : MenuLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)slideOutAnimationSwitchChanged:(UISwitch *)sender
|
||||||
|
{
|
||||||
|
((LeftMenuViewController *)[SlideNavigationController sharedInstance].leftMenu).slideOutAnimationEnabled = sender.isOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)limitPanGestureSwitchChanged:(UISwitch *)sender
|
||||||
|
{
|
||||||
|
[SlideNavigationController sharedInstance].panGestureSideOffset = (sender.isOn) ? 50 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)changeAnimationSelected:(id)sender
|
||||||
|
{
|
||||||
|
[[SlideNavigationController sharedInstance] openMenu:MenuRight withCompletion:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)shadowSwitchSelected:(UISwitch *)sender
|
||||||
|
{
|
||||||
|
[SlideNavigationController sharedInstance].enableShadow = sender.isOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)enablePanGestureSelected:(UISwitch *)sender
|
||||||
|
{
|
||||||
|
[SlideNavigationController sharedInstance].enableSwipeGesture = sender.isOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)portraitSlideOffsetChanged:(UISegmentedControl *)sender
|
||||||
|
{
|
||||||
|
[SlideNavigationController sharedInstance].portraitSlideOffset = [self pixelsFromIndex:sender.selectedSegmentIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)landscapeSlideOffsetChanged:(UISegmentedControl *)sender
|
||||||
|
{
|
||||||
|
[SlideNavigationController sharedInstance].landscapeSlideOffset = [self pixelsFromIndex:sender.selectedSegmentIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Helpers -
|
||||||
|
|
||||||
|
- (NSInteger)indexFromPixels:(NSInteger)pixels
|
||||||
|
{
|
||||||
|
if (pixels == 60)
|
||||||
|
return 0;
|
||||||
|
else if (pixels == 120)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)pixelsFromIndex:(NSInteger)index
|
||||||
|
{
|
||||||
|
switch (index)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return 60;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return 120;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return 200;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
//
|
||||||
|
// MenuViewController.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 4/24/13.
|
||||||
|
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "SlideNavigationController.h"
|
||||||
|
|
||||||
|
@interface LeftMenuViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
|
||||||
|
|
||||||
|
@property (nonatomic, strong) IBOutlet UITableView *tableView;
|
||||||
|
@property (nonatomic, assign) BOOL slideOutAnimationEnabled;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,117 @@
|
||||||
|
//
|
||||||
|
// MenuViewController.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 4/24/13.
|
||||||
|
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "LeftMenuViewController.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlide.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorScale.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorScaleAndFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlideAndFade.h"
|
||||||
|
|
||||||
|
@implementation LeftMenuViewController
|
||||||
|
|
||||||
|
#pragma mark - UIViewController Methods -
|
||||||
|
|
||||||
|
- (id)initWithCoder:(NSCoder *)aDecoder
|
||||||
|
{
|
||||||
|
self.slideOutAnimationEnabled = YES;
|
||||||
|
|
||||||
|
return [super initWithCoder:aDecoder];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewDidLoad
|
||||||
|
{
|
||||||
|
[super viewDidLoad];
|
||||||
|
|
||||||
|
self.tableView.separatorColor = [UIColor lightGrayColor];
|
||||||
|
|
||||||
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"leftMenu.jpg"]];
|
||||||
|
self.tableView.backgroundView = imageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UITableView Delegate & Datasrouce -
|
||||||
|
|
||||||
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 20)];
|
||||||
|
view.backgroundColor = [UIColor clearColor];
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"leftMenuCell"];
|
||||||
|
|
||||||
|
switch (indexPath.row)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
cell.textLabel.text = @"Home";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
cell.textLabel.text = @"Profile";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
cell.textLabel.text = @"Friends";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
cell.textLabel.text = @"Sign Out";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.backgroundColor = [UIColor clearColor];
|
||||||
|
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
|
||||||
|
bundle: nil];
|
||||||
|
|
||||||
|
UIViewController *vc ;
|
||||||
|
|
||||||
|
switch (indexPath.row)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"HomeViewController"];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"ProfileViewController"];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"FriendsViewController"];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
|
||||||
|
[[SlideNavigationController sharedInstance] popToRootViewControllerAnimated:YES];
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[SlideNavigationController sharedInstance] popToRootAndSwitchToViewController:vc
|
||||||
|
withSlideOutAnimation:self.slideOutAnimationEnabled
|
||||||
|
andCompletion:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
//
|
|
||||||
// MenuViewController.h
|
|
||||||
// SlideMenu
|
|
||||||
//
|
|
||||||
// Created by Aryan Gh on 4/24/13.
|
|
||||||
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
#import "SlideNavigationController.h"
|
|
||||||
|
|
||||||
@interface MenuViewController : UIViewController <UITableViewDelegate>
|
|
||||||
|
|
||||||
@property (nonatomic, strong) NSString *cellIdentifier;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
||||||
//
|
|
||||||
// MenuViewController.m
|
|
||||||
// SlideMenu
|
|
||||||
//
|
|
||||||
// Created by Aryan Gh on 4/24/13.
|
|
||||||
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MenuViewController.h"
|
|
||||||
|
|
||||||
@implementation MenuViewController
|
|
||||||
@synthesize cellIdentifier;
|
|
||||||
|
|
||||||
#pragma mark - UITableView Delegate & Datasrouce -
|
|
||||||
|
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
||||||
{
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
||||||
{
|
|
||||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier];
|
|
||||||
|
|
||||||
switch (indexPath.row)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
cell.detailTextLabel.text = @"Home";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
cell.detailTextLabel.text = @"Profile";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
cell.detailTextLabel.text = @"Friends";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
|
||||||
{
|
|
||||||
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
|
|
||||||
bundle: nil];
|
|
||||||
|
|
||||||
UIViewController *vc ;
|
|
||||||
|
|
||||||
switch (indexPath.row)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"HomeViewController"];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"ProfileViewController"];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"ProfileViewController"];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[SlideNavigationController sharedInstance] switchToViewController:vc withCompletion:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
//
|
||||||
|
// RightMenuViewController.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 4/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlide.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorScale.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorScaleAndFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlideAndFade.h"
|
||||||
|
|
||||||
|
@interface RightMenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, strong) IBOutlet UITableView *tableView;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
//
|
||||||
|
// RightMenuViewController.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 4/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "RightMenuViewController.h"
|
||||||
|
|
||||||
|
@implementation RightMenuViewController
|
||||||
|
|
||||||
|
#pragma mark - UIViewController Methods -
|
||||||
|
|
||||||
|
- (void)viewDidLoad
|
||||||
|
{
|
||||||
|
[super viewDidLoad];
|
||||||
|
|
||||||
|
self.tableView.separatorColor = [UIColor lightGrayColor];
|
||||||
|
|
||||||
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"rightMenu.jpg"]];
|
||||||
|
self.tableView.backgroundView = imageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UITableView Delegate & Datasrouce -
|
||||||
|
|
||||||
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
return 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 20)];
|
||||||
|
view.backgroundColor = [UIColor clearColor];
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"rightMenuCell"];
|
||||||
|
|
||||||
|
switch (indexPath.row)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
cell.textLabel.text = @"None";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
cell.textLabel.text = @"Slide";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
cell.textLabel.text = @"Fade";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
cell.textLabel.text = @"Slide And Fade";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
cell.textLabel.text = @"Scale";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
cell.textLabel.text = @"Scale And Fade";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.backgroundColor = [UIColor clearColor];
|
||||||
|
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
id <SlideNavigationContorllerAnimator> revealAnimator;
|
||||||
|
CGFloat animationDuration = 0;
|
||||||
|
|
||||||
|
switch (indexPath.row)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
revealAnimator = nil;
|
||||||
|
animationDuration = .19;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
revealAnimator = [[SlideNavigationContorllerAnimatorSlide alloc] init];
|
||||||
|
animationDuration = .19;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
revealAnimator = [[SlideNavigationContorllerAnimatorFade alloc] init];
|
||||||
|
animationDuration = .18;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
revealAnimator = [[SlideNavigationContorllerAnimatorSlideAndFade alloc] initWithMaximumFadeAlpha:.8 fadeColor:[UIColor blackColor] andSlideMovement:100];
|
||||||
|
animationDuration = .19;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
revealAnimator = [[SlideNavigationContorllerAnimatorScale alloc] init];
|
||||||
|
animationDuration = .22;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
revealAnimator = [[SlideNavigationContorllerAnimatorScaleAndFade alloc] initWithMaximumFadeAlpha:.6 fadeColor:[UIColor blackColor] andMinimumScale:.8];
|
||||||
|
animationDuration = .22;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[SlideNavigationController sharedInstance] closeMenuWithCompletion:^{
|
||||||
|
[SlideNavigationController sharedInstance].menuRevealAnimationDuration = animationDuration;
|
||||||
|
[SlideNavigationController sharedInstance].menuRevealAnimator = revealAnimator;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 310 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
|
|
@ -9,7 +9,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.aryaxt.${PRODUCT_NAME:rfc1034identifier}</string>
|
<string>com.aryaxt.$(PRODUCT_NAME:rfc1034identifier)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
</array>
|
</array>
|
||||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
<array>
|
<array>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimation.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "SlideNavigationController.h"
|
||||||
|
|
||||||
|
@protocol SlideNavigationContorllerAnimator <NSObject>
|
||||||
|
|
||||||
|
// Initial state of the view before animation starts
|
||||||
|
// This gets called right before the menu is about to reveal
|
||||||
|
- (void)prepareMenuForAnimation:(Menu)menu;
|
||||||
|
|
||||||
|
// Animate the view based on the progress (progress is between 0 and 1)
|
||||||
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress;
|
||||||
|
|
||||||
|
// Gets called ff for any the instance of animator is being change
|
||||||
|
// You should make any cleanup that is needed
|
||||||
|
- (void)clear;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationFade.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorFade : NSObject <SlideNavigationContorllerAnimator>
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat maximumFadeAlpha;
|
||||||
|
@property (nonatomic, strong) UIColor *fadeColor;
|
||||||
|
|
||||||
|
- (id)initWithMaximumFadeAlpha:(CGFloat)maximumFadeAlpha andFadeColor:(UIColor *)fadeColor;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationFade.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import "SlideNavigationContorllerAnimatorFade.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorFade()
|
||||||
|
@property (nonatomic, strong) UIView *fadeAnimationView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation SlideNavigationContorllerAnimatorFade
|
||||||
|
|
||||||
|
#pragma mark - Initialization -
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
if (self = [self initWithMaximumFadeAlpha:.8 andFadeColor:[UIColor blackColor]])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithMaximumFadeAlpha:(CGFloat)maximumFadeAlpha andFadeColor:(UIColor *)fadeColor
|
||||||
|
{
|
||||||
|
if (self = [super init])
|
||||||
|
{
|
||||||
|
self.maximumFadeAlpha = maximumFadeAlpha;
|
||||||
|
self.fadeColor = fadeColor;
|
||||||
|
|
||||||
|
self.fadeAnimationView = [[UIView alloc] init];
|
||||||
|
self.fadeAnimationView.backgroundColor = self.fadeColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - SlideNavigationContorllerAnimation Methods -
|
||||||
|
|
||||||
|
- (void)prepareMenuForAnimation:(Menu)menu
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
self.fadeAnimationView.alpha = self.maximumFadeAlpha;
|
||||||
|
self.fadeAnimationView.frame = menuViewController.view.bounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
self.fadeAnimationView.frame = menuViewController.view.bounds;
|
||||||
|
[menuViewController.view addSubview:self.fadeAnimationView];
|
||||||
|
self.fadeAnimationView.alpha = self.maximumFadeAlpha - (self.maximumFadeAlpha *progress);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clear
|
||||||
|
{
|
||||||
|
[self.fadeAnimationView removeFromSuperview];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationScale.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorScale : NSObject <SlideNavigationContorllerAnimator>
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat minimumScale;
|
||||||
|
|
||||||
|
- (id)initWithMinimumScale:(CGFloat)minimumScale;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationScale.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import "SlideNavigationContorllerAnimatorScale.h"
|
||||||
|
|
||||||
|
@implementation SlideNavigationContorllerAnimatorScale
|
||||||
|
|
||||||
|
#pragma mark - Initialization -
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
if (self = [self initWithMinimumScale:.9])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithMinimumScale:(CGFloat)minimumScale
|
||||||
|
{
|
||||||
|
if (self = [super init])
|
||||||
|
{
|
||||||
|
self.minimumScale = minimumScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - SlideNavigationContorllerAnimation Methods -
|
||||||
|
|
||||||
|
- (void)prepareMenuForAnimation:(Menu)menu
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
menuViewController.view.transform = CGAffineTransformScale(menuViewController.view.transform, self.minimumScale, self.minimumScale);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
CGFloat scale = MIN(1, (1-self.minimumScale) *progress + self.minimumScale);
|
||||||
|
menuViewController.view.transform = CGAffineTransformScale([SlideNavigationController sharedInstance].view.transform, scale, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clear
|
||||||
|
{
|
||||||
|
[SlideNavigationController sharedInstance].leftMenu.view.transform = CGAffineTransformScale([SlideNavigationController sharedInstance].view.transform, 1, 1);
|
||||||
|
[SlideNavigationController sharedInstance].rightMenu.view.transform = CGAffineTransformScale([SlideNavigationController sharedInstance].view.transform, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationScaleAndFade.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorScaleAndFade : NSObject <SlideNavigationContorllerAnimator>
|
||||||
|
|
||||||
|
- (id)initWithMaximumFadeAlpha:(CGFloat)maximumFadeAlpha fadeColor:(UIColor *)fadeColor andMinimumScale:(CGFloat)minimumScale;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationScaleAndFade.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import "SlideNavigationContorllerAnimatorScaleAndFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorScale.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorScaleAndFade()
|
||||||
|
@property (nonatomic, strong) SlideNavigationContorllerAnimatorFade *fadeAnimation;
|
||||||
|
@property (nonatomic, strong) SlideNavigationContorllerAnimatorScale *scaleAnimation;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation SlideNavigationContorllerAnimatorScaleAndFade
|
||||||
|
|
||||||
|
#pragma mark - Initialization -
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
if (self = [self initWithMaximumFadeAlpha:.8 fadeColor:[UIColor blackColor] andMinimumScale:.8])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithMaximumFadeAlpha:(CGFloat)maximumFadeAlpha fadeColor:(UIColor *)fadeColor andMinimumScale:(CGFloat)minimumScale
|
||||||
|
{
|
||||||
|
if (self = [super init])
|
||||||
|
{
|
||||||
|
self.fadeAnimation = [[SlideNavigationContorllerAnimatorFade alloc] initWithMaximumFadeAlpha:maximumFadeAlpha andFadeColor:fadeColor];
|
||||||
|
self.scaleAnimation = [[SlideNavigationContorllerAnimatorScale alloc] initWithMinimumScale:minimumScale];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - SlideNavigationContorllerAnimation Methods -
|
||||||
|
|
||||||
|
- (void)prepareMenuForAnimation:(Menu)menu
|
||||||
|
{
|
||||||
|
[self.fadeAnimation prepareMenuForAnimation:menu];
|
||||||
|
[self.scaleAnimation prepareMenuForAnimation:menu];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
[self.fadeAnimation animateMenu:menu withProgress:progress];
|
||||||
|
[self.scaleAnimation animateMenu:menu withProgress:progress];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clear
|
||||||
|
{
|
||||||
|
[self.fadeAnimation clear];
|
||||||
|
[self.scaleAnimation clear];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationSlide.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorSlide : NSObject <SlideNavigationContorllerAnimator>
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat slideMovement;
|
||||||
|
|
||||||
|
- (id)initWithSlideMovement:(CGFloat)slideMovement;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,173 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationSlide.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlide.h"
|
||||||
|
|
||||||
|
@implementation SlideNavigationContorllerAnimatorSlide
|
||||||
|
|
||||||
|
#pragma mark - Initialization -
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
if (self = [self initWithSlideMovement:100])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithSlideMovement:(CGFloat)slideMovement
|
||||||
|
{
|
||||||
|
if (self = [super init])
|
||||||
|
{
|
||||||
|
self.slideMovement = slideMovement;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - SlideNavigationContorllerAnimation Methods -
|
||||||
|
|
||||||
|
- (void)prepareMenuForAnimation:(Menu)menu
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
||||||
|
CGRect rect = menuViewController.view.frame;
|
||||||
|
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
||||||
|
{
|
||||||
|
rect.origin.x = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
|
{
|
||||||
|
if (orientation == UIInterfaceOrientationLandscapeRight)
|
||||||
|
{
|
||||||
|
rect.origin.y = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.origin.y = (menu == MenuRight) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (orientation == UIInterfaceOrientationPortrait)
|
||||||
|
{
|
||||||
|
rect.origin.x = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.origin.x = (menu == MenuRight) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menuViewController.view.frame = rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
UIInterfaceOrientation orientation = [SlideNavigationController sharedInstance].interfaceOrientation;
|
||||||
|
|
||||||
|
NSInteger location = (menu == MenuLeft)
|
||||||
|
? (self.slideMovement * -1) + (self.slideMovement * progress)
|
||||||
|
: (self.slideMovement * (1-progress));
|
||||||
|
|
||||||
|
if (menu == MenuLeft)
|
||||||
|
location = (location > 0) ? 0 : location;
|
||||||
|
|
||||||
|
if (menu == MenuRight)
|
||||||
|
location = (location < 0) ? 0 : location;
|
||||||
|
|
||||||
|
CGRect rect = menuViewController.view.frame;
|
||||||
|
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
||||||
|
{
|
||||||
|
rect.origin.x = location;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
|
{
|
||||||
|
rect.origin.y = (orientation == UIInterfaceOrientationLandscapeRight) ? location : location*-1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.origin.x = (orientation == UIInterfaceOrientationPortrait) ? location : location*-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menuViewController.view.frame = rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clear
|
||||||
|
{
|
||||||
|
[self clearMenu:MenuLeft];
|
||||||
|
[self clearMenu:MenuRight];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Method -
|
||||||
|
|
||||||
|
- (void)clearMenu:(Menu)menu
|
||||||
|
{
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
|
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
||||||
|
|
||||||
|
CGRect rect = menuViewController.view.frame;
|
||||||
|
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
||||||
|
{
|
||||||
|
rect.origin.x = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
|
{
|
||||||
|
rect.origin.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.origin.x = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menuViewController.view.frame = rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationSlideAndFade.h
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorSlideAndFade : NSObject <SlideNavigationContorllerAnimator>
|
||||||
|
|
||||||
|
- (id)initWithMaximumFadeAlpha:(CGFloat)maximumFadeAlpha fadeColor:(UIColor *)fadeColor andSlideMovement:(CGFloat)slideMovement;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
//
|
||||||
|
// SlideNavigationContorllerAnimationSlideAndFade.m
|
||||||
|
// SlideMenu
|
||||||
|
//
|
||||||
|
// Created by Aryan Gh on 1/26/14.
|
||||||
|
// Copyright (c) 2014 Aryan Ghassemi. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/aryaxt/iOS-Slide-Menu
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlideAndFade.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorSlide.h"
|
||||||
|
#import "SlideNavigationContorllerAnimatorFade.h"
|
||||||
|
|
||||||
|
@interface SlideNavigationContorllerAnimatorSlideAndFade()
|
||||||
|
@property (nonatomic, strong) SlideNavigationContorllerAnimatorFade *fadeAnimation;
|
||||||
|
@property (nonatomic, strong) SlideNavigationContorllerAnimatorSlide *slideAnimation;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation SlideNavigationContorllerAnimatorSlideAndFade
|
||||||
|
|
||||||
|
#pragma mark - Initialization -
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
if (self = [self initWithMaximumFadeAlpha:.8 fadeColor:[UIColor blackColor] andSlideMovement:100])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithMaximumFadeAlpha:(CGFloat)maximumFadeAlpha fadeColor:(UIColor *)fadeColor andSlideMovement:(CGFloat)slideMovement
|
||||||
|
{
|
||||||
|
if (self = [super init])
|
||||||
|
{
|
||||||
|
self.fadeAnimation = [[SlideNavigationContorllerAnimatorFade alloc] initWithMaximumFadeAlpha:maximumFadeAlpha andFadeColor:fadeColor];
|
||||||
|
self.slideAnimation = [[SlideNavigationContorllerAnimatorSlide alloc] initWithSlideMovement:slideMovement];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - SlideNavigationContorllerAnimation Methods -
|
||||||
|
|
||||||
|
- (void)prepareMenuForAnimation:(Menu)menu
|
||||||
|
{
|
||||||
|
[self.fadeAnimation prepareMenuForAnimation:menu];
|
||||||
|
[self.slideAnimation prepareMenuForAnimation:menu];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
[self.fadeAnimation animateMenu:menu withProgress:progress];
|
||||||
|
[self.slideAnimation animateMenu:menu withProgress:progress];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clear
|
||||||
|
{
|
||||||
|
[self.fadeAnimation clear];
|
||||||
|
[self.slideAnimation clear];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
@ -28,6 +28,8 @@
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <QuartzCore/QuartzCore.h>
|
#import <QuartzCore/QuartzCore.h>
|
||||||
|
|
||||||
|
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
|
||||||
|
|
||||||
@protocol SlideNavigationControllerDelegate <NSObject>
|
@protocol SlideNavigationControllerDelegate <NSObject>
|
||||||
@optional
|
@optional
|
||||||
- (BOOL)slideNavigationControllerShouldDisplayRightMenu;
|
- (BOOL)slideNavigationControllerShouldDisplayRightMenu;
|
||||||
|
|
@ -35,20 +37,47 @@
|
||||||
@end
|
@end
|
||||||
|
|
||||||
typedef enum{
|
typedef enum{
|
||||||
MenuLeft,
|
MenuLeft = 1,
|
||||||
MenuRight,
|
MenuRight = 2
|
||||||
}Menu;
|
}Menu;
|
||||||
|
|
||||||
|
@protocol SlideNavigationContorllerAnimator;
|
||||||
@interface SlideNavigationController : UINavigationController <UINavigationControllerDelegate>
|
@interface SlideNavigationController : UINavigationController <UINavigationControllerDelegate>
|
||||||
|
|
||||||
|
extern NSString * const SlideNavigationControllerDidOpen;
|
||||||
|
extern NSString *const SlideNavigationControllerDidClose;
|
||||||
|
extern NSString *const SlideNavigationControllerDidReveal;
|
||||||
|
|
||||||
|
extern NSString *const SlideMenuOpenAfterSwipeKey;
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL avoidSwitchingToSameClassViewController;
|
@property (nonatomic, assign) BOOL avoidSwitchingToSameClassViewController;
|
||||||
@property (nonatomic, assign) BOOL enableSwipeGesture;
|
@property (nonatomic, assign) BOOL enableSwipeGesture;
|
||||||
@property (nonatomic, strong) UIViewController *righMenu;
|
@property (nonatomic, assign) BOOL enableShadow;
|
||||||
|
@property (nonatomic, strong) UIViewController *rightMenu;
|
||||||
@property (nonatomic, strong) UIViewController *leftMenu;
|
@property (nonatomic, strong) UIViewController *leftMenu;
|
||||||
@property (nonatomic, strong) UIBarButtonItem *leftbarButtonItem;
|
@property (nonatomic, strong) UIBarButtonItem *leftBarButtonItem;
|
||||||
@property (nonatomic, strong) UIBarButtonItem *rightBarButtonItem;
|
@property (nonatomic, strong) UIBarButtonItem *rightBarButtonItem;
|
||||||
|
@property (nonatomic, assign) CGFloat portraitSlideOffset;
|
||||||
|
@property (nonatomic, assign) CGFloat landscapeSlideOffset;
|
||||||
|
@property (nonatomic, assign) CGFloat panGestureSideOffset;
|
||||||
|
@property (nonatomic, assign) CGFloat menuOpenAnimationDuration;
|
||||||
|
@property (nonatomic, assign) CGFloat menuCloseAnimationDuration;
|
||||||
|
@property (nonatomic, assign) UIViewAnimationOptions menuRevealAnimationOption;
|
||||||
|
@property (nonatomic, strong) id <SlideNavigationContorllerAnimator> menuRevealAnimator;
|
||||||
|
|
||||||
+ (SlideNavigationController *)sharedInstance;
|
+ (SlideNavigationController *)sharedInstance;
|
||||||
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;
|
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion __deprecated;
|
||||||
|
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController withSlideOutAnimation:(BOOL)slideOutAnimation andCompletion:(void (^)())completion;
|
||||||
|
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;
|
||||||
|
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController withSlideOutAnimation:(BOOL)slideOutAnimation andCompletion:(void (^)())completion;
|
||||||
|
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;
|
||||||
|
- (void)bounceMenu:(Menu)menu withCompletion:(void (^)())completion;
|
||||||
|
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion;
|
||||||
|
- (void)closeMenuWithCompletion:(void (^)())completion;
|
||||||
|
- (void)toggleLeftMenu;
|
||||||
|
- (void)toggleRightMenu;
|
||||||
|
- (BOOL)isMenuOpen;
|
||||||
|
|
||||||
|
- (void)prepareMenuForReveal:(Menu)menu;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -26,27 +26,43 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#import "SlideNavigationController.h"
|
#import "SlideNavigationController.h"
|
||||||
|
#import "SlideNavigationContorllerAnimator.h"
|
||||||
|
|
||||||
@interface SlideNavigationController()
|
typedef enum {
|
||||||
|
PopTypeAll,
|
||||||
|
PopTypeRoot
|
||||||
|
} PopType;
|
||||||
|
|
||||||
|
@interface SlideNavigationController() <UIGestureRecognizerDelegate>
|
||||||
@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer;
|
@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer;
|
||||||
@property (nonatomic, strong) UIPanGestureRecognizer *panRecognizer;
|
@property (nonatomic, strong) UIPanGestureRecognizer *panRecognizer;
|
||||||
@property (nonatomic, assign) CGPoint draggingPoint;
|
@property (nonatomic, assign) CGPoint draggingPoint;
|
||||||
|
@property (nonatomic, assign) Menu lastRevealedMenu;
|
||||||
|
@property (nonatomic, assign) BOOL menuNeedsLayout;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation SlideNavigationController
|
@implementation SlideNavigationController
|
||||||
@synthesize righMenu;
|
|
||||||
@synthesize leftMenu;
|
|
||||||
@synthesize tapRecognizer;
|
|
||||||
@synthesize panRecognizer;
|
|
||||||
@synthesize draggingPoint;
|
|
||||||
@synthesize leftbarButtonItem;
|
|
||||||
@synthesize rightBarButtonItem;
|
|
||||||
@synthesize enableSwipeGesture;
|
|
||||||
|
|
||||||
#define MENU_OFFSET 60
|
NSString * const SlideNavigationControllerDidOpen = @"SlideNavigationControllerDidOpen";
|
||||||
|
NSString * const SlideNavigationControllerDidClose = @"SlideNavigationControllerDidClose";
|
||||||
|
NSString *const SlideNavigationControllerDidReveal = @"SlideNavigationControllerDidReveal";
|
||||||
|
|
||||||
|
NSString *const SlideMenuOpenAfterSwipeKey = @"SlideMenuOpenAfterSwipeKey";
|
||||||
|
|
||||||
#define MENU_SLIDE_ANIMATION_DURATION .3
|
#define MENU_SLIDE_ANIMATION_DURATION .3
|
||||||
#define MENU_QUICK_SLIDE_ANIMATION_DURATION .1
|
#define MENU_SLIDE_OPEN_ANIMATION_DURATION .4
|
||||||
|
#define MENU_SLIDE_CLOSE_ANIMATION_DURATION .2
|
||||||
|
#define MENU_SLIDE_ANIMATION_OPTION UIViewAnimationOptionCurveLinear
|
||||||
|
#define MENU_QUICK_SLIDE_ANIMATION_DURATION .18
|
||||||
#define MENU_IMAGE @"menu-button"
|
#define MENU_IMAGE @"menu-button"
|
||||||
|
#define MENU_SHADOW_RADIUS 10
|
||||||
|
#define MENU_SHADOW_OPACITY 1
|
||||||
|
#define MENU_DEFAULT_SLIDE_OFFSET 60
|
||||||
|
#define MENU_FAST_VELOCITY_FOR_SWIPE_FOLLOW_DIRECTION 1200
|
||||||
|
#define STATUS_BAR_HEIGHT 20
|
||||||
|
#define NOTIFICATION_USER_INFO_MENU_LEFT @"left"
|
||||||
|
#define NOTIFICATION_USER_INFO_MENU_RIGHT @"right"
|
||||||
|
#define NOTIFICATION_USER_INFO_MENU @"menu"
|
||||||
|
|
||||||
static SlideNavigationController *singletonInstance;
|
static SlideNavigationController *singletonInstance;
|
||||||
|
|
||||||
|
|
@ -54,22 +70,10 @@ static SlideNavigationController *singletonInstance;
|
||||||
|
|
||||||
+ (SlideNavigationController *)sharedInstance
|
+ (SlideNavigationController *)sharedInstance
|
||||||
{
|
{
|
||||||
return singletonInstance;
|
if (!singletonInstance)
|
||||||
}
|
NSLog(@"SlideNavigationController has not been initialized. Either place one in your storyboard or initialize one in code");
|
||||||
|
|
||||||
- (void)awakeFromNib
|
|
||||||
{
|
|
||||||
[self setup];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithRootViewController:(UIViewController *)rootViewController
|
|
||||||
{
|
|
||||||
if (self = [super initWithRootViewController:rootViewController])
|
|
||||||
{
|
|
||||||
[self setup];
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
return singletonInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)init
|
- (id)init
|
||||||
|
|
@ -82,63 +86,261 @@ static SlideNavigationController *singletonInstance;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id)initWithCoder:(NSCoder *)aDecoder
|
||||||
|
{
|
||||||
|
if (self = [super initWithCoder:aDecoder])
|
||||||
|
{
|
||||||
|
[self setup];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithRootViewController:(UIViewController *)rootViewController
|
||||||
|
{
|
||||||
|
if (self = [super initWithRootViewController:rootViewController])
|
||||||
|
{
|
||||||
|
[self setup];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass
|
||||||
|
{
|
||||||
|
if (self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:toolbarClass])
|
||||||
|
{
|
||||||
|
[self setup];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setup
|
- (void)setup
|
||||||
{
|
{
|
||||||
self.avoidSwitchingToSameClassViewController = YES;
|
if (singletonInstance)
|
||||||
|
NSLog(@"Singleton instance already exists. You can only instantiate one instance of SlideNavigationController. This could cause major issues");
|
||||||
|
|
||||||
singletonInstance = self;
|
singletonInstance = self;
|
||||||
|
|
||||||
|
self.menuOpenAnimationDuration = MENU_SLIDE_OPEN_ANIMATION_DURATION;
|
||||||
|
self.menuCloseAnimationDuration = MENU_SLIDE_CLOSE_ANIMATION_DURATION;
|
||||||
|
self.menuRevealAnimationOption = MENU_SLIDE_ANIMATION_OPTION;
|
||||||
|
self.landscapeSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
|
||||||
|
self.portraitSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
|
||||||
|
self.panGestureSideOffset = 0;
|
||||||
|
self.avoidSwitchingToSameClassViewController = YES;
|
||||||
|
self.enableShadow = YES;
|
||||||
|
self.enableSwipeGesture = YES;
|
||||||
self.delegate = self;
|
self.delegate = self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillLayoutSubviews
|
||||||
|
{
|
||||||
|
[super viewWillLayoutSubviews];
|
||||||
|
|
||||||
self.view.layer.shadowColor = [UIColor darkGrayColor].CGColor;
|
// Update shadow size of enabled
|
||||||
self.view.layer.shadowRadius = 10;
|
if (self.enableShadow)
|
||||||
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
|
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
|
||||||
self.view.layer.shadowOpacity = 1;
|
|
||||||
self.view.layer.shouldRasterize = YES;
|
// When menu open we disable user interaction
|
||||||
self.view.layer.rasterizationScale = [UIScreen mainScreen].scale;
|
// When rotates we want to make sure that userInteraction is enabled again
|
||||||
|
//[self enableTapGestureToCloseMenu:NO];
|
||||||
[self setEnableSwipeGesture:YES];
|
|
||||||
|
if (self.menuNeedsLayout)
|
||||||
|
{
|
||||||
|
[self updateMenuFrameAndTransformAccordingToOrientation];
|
||||||
|
|
||||||
|
// Handle different horizontal/vertical slideOffset during rotation
|
||||||
|
// On iOS below 8 we just close the menu, iOS8 handles rotation better so we support keepiong the menu open
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [self isMenuOpen])
|
||||||
|
{
|
||||||
|
Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
|
||||||
|
[self openMenu:menu withCompletion:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
self.menuNeedsLayout = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||||
|
{
|
||||||
|
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||||
|
|
||||||
|
self.menuNeedsLayout = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
|
||||||
|
{
|
||||||
|
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
|
||||||
|
|
||||||
|
self.menuNeedsLayout = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Public Methods -
|
#pragma mark - Public Methods -
|
||||||
|
|
||||||
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion
|
- (void)bounceMenu:(Menu)menu withCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self prepareMenuForReveal:menu];
|
||||||
|
NSInteger movementDirection = (menu == MenuLeft) ? 1 : -1;
|
||||||
|
|
||||||
|
[UIView animateWithDuration:.16 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
|
||||||
|
[self moveHorizontallyToLocation:30*movementDirection];
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:.1 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
|
||||||
|
[self moveHorizontallyToLocation:0];
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:.12 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
|
||||||
|
[self moveHorizontallyToLocation:16*movementDirection];
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:.08 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
|
||||||
|
[self moveHorizontallyToLocation:0];
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:.08 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
|
||||||
|
[self moveHorizontallyToLocation:6*movementDirection];
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:.06 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
|
||||||
|
[self moveHorizontallyToLocation:0];
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
if (completion)
|
||||||
|
completion();
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)switchToViewController:(UIViewController *)viewController
|
||||||
|
popType:(PopType)poptype
|
||||||
|
andCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
if (self.avoidSwitchingToSameClassViewController && [self.topViewController isKindOfClass:viewController.class])
|
if (self.avoidSwitchingToSameClassViewController && [self.topViewController isKindOfClass:viewController.class])
|
||||||
{
|
{
|
||||||
[self closeMenuWithCompletion:completion];
|
[self closeMenuWithCompletion:completion];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void (^switchAndCallCompletion)(BOOL) = ^(BOOL closeMenuBeforeCallingCompletion) {
|
||||||
|
if (poptype == PopTypeAll) {
|
||||||
|
[self setViewControllers:@[viewController]];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[super popToRootViewControllerAnimated:NO];
|
||||||
|
[super pushViewController:viewController animated:NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (closeMenuBeforeCallingCompletion)
|
||||||
|
{
|
||||||
|
[self closeMenuWithCompletion:^{
|
||||||
|
if (completion)
|
||||||
|
completion();
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (completion)
|
||||||
|
completion();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// if ([self isMenuOpen])
|
||||||
|
// {
|
||||||
|
// if (slideOutAnimation)
|
||||||
|
// {
|
||||||
|
// [UIView animateWithDuration:(slideOutAnimation) ? self.menuRevealAnimationDuration : 0
|
||||||
|
// delay:0
|
||||||
|
// options:self.menuRevealAnimationOption
|
||||||
|
// animations:^{
|
||||||
|
// CGFloat width = self.horizontalSize;
|
||||||
|
// CGFloat moveLocation = (self.horizontalLocation> 0) ? width : -1*width;
|
||||||
|
// [self moveHorizontallyToLocation:moveLocation];
|
||||||
|
// } completion:^(BOOL finished) {
|
||||||
|
// switchAndCallCompletion(YES);
|
||||||
|
// }];
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// switchAndCallCompletion(YES);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// switchAndCallCompletion(NO);
|
||||||
|
// }
|
||||||
|
|
||||||
|
switchAndCallCompletion([self isMenuOpen]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
|
||||||
|
withSlideOutAnimation:(BOOL)slideOutAnimation
|
||||||
|
andCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
|
||||||
|
withCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController
|
||||||
|
withSlideOutAnimation:(BOOL)slideOutAnimation
|
||||||
|
andCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self switchToViewController:viewController popType:PopTypeAll andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController
|
||||||
|
withCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self switchToViewController:viewController popType:PopTypeAll andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)toggleLeftMenu
|
||||||
|
{
|
||||||
|
[self toggleMenu:MenuLeft withCompletion:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)toggleRightMenu
|
||||||
|
{
|
||||||
|
[self toggleMenu:MenuRight withCompletion:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isMenuOpen
|
||||||
|
{
|
||||||
|
return (self.horizontalLocation == 0) ? NO : YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setEnableShadow:(BOOL)enable
|
||||||
|
{
|
||||||
|
_enableShadow = enable;
|
||||||
|
|
||||||
__block CGRect rect = self.view.frame;
|
if (enable)
|
||||||
|
|
||||||
if ([self isMenuOpen])
|
|
||||||
{
|
{
|
||||||
[UIView animateWithDuration:MENU_SLIDE_ANIMATION_DURATION
|
self.view.layer.shadowColor = [UIColor darkGrayColor].CGColor;
|
||||||
delay:0
|
self.view.layer.shadowRadius = MENU_SHADOW_RADIUS;
|
||||||
options:UIViewAnimationOptionCurveEaseOut
|
self.view.layer.shadowOpacity = MENU_SHADOW_OPACITY;
|
||||||
animations:^{
|
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
|
||||||
rect.origin.x = (rect.origin.x > 0) ? rect.size.width : -1*rect.size.width;
|
self.view.layer.shouldRasterize = YES;
|
||||||
self.view.frame = rect;
|
self.view.layer.rasterizationScale = [UIScreen mainScreen].scale;
|
||||||
} completion:^(BOOL finished) {
|
|
||||||
|
|
||||||
[super popToRootViewControllerAnimated:NO];
|
|
||||||
[super pushViewController:viewController animated:NO];
|
|
||||||
|
|
||||||
[self closeMenuWithCompletion:^{
|
|
||||||
if (completion)
|
|
||||||
completion();
|
|
||||||
}];
|
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[super popToRootViewControllerAnimated:NO];
|
self.view.layer.shadowOpacity = 0;
|
||||||
[super pushViewController:viewController animated:YES];
|
self.view.layer.shadowRadius = 0;
|
||||||
|
|
||||||
if (completion)
|
|
||||||
completion();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Override Methods -
|
||||||
|
|
||||||
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
|
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
|
||||||
{
|
{
|
||||||
if ([self isMenuOpen])
|
if ([self isMenuOpen])
|
||||||
|
|
@ -187,10 +389,49 @@ static SlideNavigationController *singletonInstance;
|
||||||
|
|
||||||
#pragma mark - Private Methods -
|
#pragma mark - Private Methods -
|
||||||
|
|
||||||
|
- (void)updateMenuFrameAndTransformAccordingToOrientation
|
||||||
|
{
|
||||||
|
// Animate rotatation when menu is open and device rotates
|
||||||
|
CGAffineTransform transform = self.view.transform;
|
||||||
|
self.leftMenu.view.transform = transform;
|
||||||
|
self.rightMenu.view.transform = transform;
|
||||||
|
|
||||||
|
self.leftMenu.view.frame = [self initialRectForMenu];
|
||||||
|
self.rightMenu.view.frame = [self initialRectForMenu];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)enableTapGestureToCloseMenu:(BOOL)enable
|
||||||
|
{
|
||||||
|
if (enable)
|
||||||
|
{
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
|
||||||
|
self.interactivePopGestureRecognizer.enabled = NO;
|
||||||
|
|
||||||
|
self.topViewController.view.userInteractionEnabled = NO;
|
||||||
|
[self.view addGestureRecognizer:self.tapRecognizer];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
|
||||||
|
self.interactivePopGestureRecognizer.enabled = YES;
|
||||||
|
|
||||||
|
self.topViewController.view.userInteractionEnabled = YES;
|
||||||
|
[self.view removeGestureRecognizer:self.tapRecognizer];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)toggleMenu:(Menu)menu withCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
if ([self isMenuOpen])
|
||||||
|
[self closeMenuWithCompletion:completion];
|
||||||
|
else
|
||||||
|
[self openMenu:menu withCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
- (UIBarButtonItem *)barButtonItemForMenu:(Menu)menu
|
- (UIBarButtonItem *)barButtonItemForMenu:(Menu)menu
|
||||||
{
|
{
|
||||||
SEL selector = (menu == MenuLeft) ? @selector(leftMenuSelected:) : @selector(righttMenuSelected:);
|
SEL selector = (menu == MenuLeft) ? @selector(leftMenuSelected:) : @selector(righttMenuSelected:);
|
||||||
UIBarButtonItem *customButton = (menu == MenuLeft) ? self.leftbarButtonItem : self.rightBarButtonItem;
|
UIBarButtonItem *customButton = (menu == MenuLeft) ? self.leftBarButtonItem : self.rightBarButtonItem;
|
||||||
|
|
||||||
if (customButton)
|
if (customButton)
|
||||||
{
|
{
|
||||||
|
|
@ -205,11 +446,6 @@ static SlideNavigationController *singletonInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)isMenuOpen
|
|
||||||
{
|
|
||||||
return (self.view.frame.origin.x == 0) ? NO : YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)shouldDisplayMenu:(Menu)menu forViewController:(UIViewController *)vc
|
- (BOOL)shouldDisplayMenu:(Menu)menu forViewController:(UIViewController *)vc
|
||||||
{
|
{
|
||||||
if (menu == MenuRight)
|
if (menu == MenuRight)
|
||||||
|
|
@ -232,74 +468,226 @@ static SlideNavigationController *singletonInstance;
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)openMenu:(Menu)menu withDuration:(float)duration andCompletion:(void (^)())completion
|
- (CGFloat)openingPart
|
||||||
{
|
{
|
||||||
[self.topViewController.view addGestureRecognizer:self.tapRecognizer];
|
CGFloat slideOffset = self.slideOffset;
|
||||||
|
CGFloat absHorizontalLocation = (CGFloat)fabs(self.horizontalLocation);
|
||||||
if (menu == MenuLeft)
|
|
||||||
{
|
return MIN(1.f, absHorizontalLocation/slideOffset);
|
||||||
[self.righMenu.view removeFromSuperview];
|
|
||||||
[self.view.window insertSubview:self.leftMenu.view atIndex:0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[self.leftMenu.view removeFromSuperview];
|
|
||||||
[self.view.window insertSubview:self.righMenu.view atIndex:0];
|
|
||||||
}
|
|
||||||
|
|
||||||
[UIView animateWithDuration:duration
|
|
||||||
delay:0
|
|
||||||
options:UIViewAnimationOptionCurveEaseOut
|
|
||||||
animations:^{
|
|
||||||
CGRect rect = self.view.frame;
|
|
||||||
rect.origin.x = (menu == MenuLeft) ? (rect.size.width - MENU_OFFSET) : ((rect.size.width - MENU_OFFSET )* -1);
|
|
||||||
self.view.frame = rect;
|
|
||||||
}
|
|
||||||
completion:^(BOOL finished) {
|
|
||||||
if (completion)
|
|
||||||
completion();
|
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion
|
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self openMenu:menu withDuration:MENU_SLIDE_ANIMATION_DURATION andCompletion:completion];
|
[self openMenu:menu afterSwipe:NO withCompletion:completion];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)closeMenuWithDuration:(float)duration andCompletion:(void (^)())completion
|
- (void)openMenu:(Menu)menu afterSwipe:(BOOL)afterSwipe withCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self.topViewController.view removeGestureRecognizer:self.tapRecognizer];
|
NSTimeInterval duration = self.menuOpenAnimationDuration * (1.f - [self openingPart]);
|
||||||
|
|
||||||
|
[self enableTapGestureToCloseMenu:YES];
|
||||||
|
|
||||||
|
[self prepareMenuForReveal:menu];
|
||||||
|
|
||||||
[UIView animateWithDuration:duration
|
[UIView animateWithDuration:duration
|
||||||
delay:0
|
delay:0
|
||||||
options:UIViewAnimationOptionCurveEaseOut
|
options:self.menuRevealAnimationOption
|
||||||
animations:^{
|
animations:^{
|
||||||
CGRect rect = self.view.frame;
|
CGRect rect = self.view.frame;
|
||||||
rect.origin.x = 0;
|
CGFloat width = self.horizontalSize;
|
||||||
self.view.frame = rect;
|
rect.origin.x = (menu == MenuLeft) ? (width - self.slideOffset) : ((width - self.slideOffset )* -1);
|
||||||
|
[self moveHorizontallyToLocation:rect.origin.x];
|
||||||
}
|
}
|
||||||
completion:^(BOOL finished) {
|
completion:^(BOOL finished) {
|
||||||
if (completion)
|
if (completion)
|
||||||
completion();
|
completion();
|
||||||
|
|
||||||
|
[self postNotificationWithName:SlideNavigationControllerDidOpen forMenu:menu withExtParams:@{
|
||||||
|
SlideMenuOpenAfterSwipeKey : @(afterSwipe)
|
||||||
|
}];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)closeMenuWithCompletion:(void (^)())completion
|
- (void)closeMenuWithCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self closeMenuWithDuration:MENU_SLIDE_ANIMATION_DURATION andCompletion:completion];
|
NSTimeInterval duration = self.menuCloseAnimationDuration * [self openingPart];
|
||||||
|
|
||||||
|
[self enableTapGestureToCloseMenu:NO];
|
||||||
|
|
||||||
|
Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
|
||||||
|
|
||||||
|
[UIView animateWithDuration:duration
|
||||||
|
delay:0
|
||||||
|
options:self.menuRevealAnimationOption
|
||||||
|
animations:^{
|
||||||
|
CGRect rect = self.view.frame;
|
||||||
|
rect.origin.x = 0;
|
||||||
|
[self moveHorizontallyToLocation:rect.origin.x];
|
||||||
|
}
|
||||||
|
completion:^(BOOL finished) {
|
||||||
|
if (completion)
|
||||||
|
completion();
|
||||||
|
|
||||||
|
[self postNotificationWithName:SlideNavigationControllerDidClose forMenu:menu];
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UINavigationControllerDelegate Methods -
|
- (void)moveHorizontallyToLocation:(CGFloat)location
|
||||||
|
|
||||||
- (void)navigationController:(UINavigationController *)navigationController
|
|
||||||
willShowViewController:(UIViewController *)viewController
|
|
||||||
animated:(BOOL)animated
|
|
||||||
{
|
{
|
||||||
if ([self shouldDisplayMenu:MenuLeft forViewController:viewController])
|
CGRect rect = self.view.frame;
|
||||||
viewController.navigationItem.leftBarButtonItem = [self barButtonItemForMenu:MenuLeft];
|
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
||||||
|
Menu menu = (self.horizontalLocation >= 0 && location >= 0) ? MenuLeft : MenuRight;
|
||||||
|
|
||||||
|
if ((location > 0 && self.horizontalLocation <= 0) || (location < 0 && self.horizontalLocation >= 0)) {
|
||||||
|
[self postNotificationWithName:SlideNavigationControllerDidReveal forMenu:(location > 0) ? MenuLeft : MenuRight];
|
||||||
|
}
|
||||||
|
|
||||||
if ([self shouldDisplayMenu:MenuRight forViewController:viewController])
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
||||||
viewController.navigationItem.rightBarButtonItem = [self barButtonItemForMenu:MenuRight];
|
{
|
||||||
|
rect.origin.x = location;
|
||||||
|
rect.origin.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
|
{
|
||||||
|
rect.origin.x = 0;
|
||||||
|
rect.origin.y = (orientation == UIInterfaceOrientationLandscapeRight) ? location : location*-1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.origin.x = (orientation == UIInterfaceOrientationPortrait) ? location : location*-1;
|
||||||
|
rect.origin.y = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.view.frame = rect;
|
||||||
|
[self updateMenuAnimation:menu];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateMenuAnimation:(Menu)menu
|
||||||
|
{
|
||||||
|
CGFloat progress = (menu == MenuLeft)
|
||||||
|
? (self.horizontalLocation / (self.horizontalSize - self.slideOffset))
|
||||||
|
: (self.horizontalLocation / ((self.horizontalSize - self.slideOffset) * -1));
|
||||||
|
|
||||||
|
[self.menuRevealAnimator animateMenu:menu withProgress:progress];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGRect)initialRectForMenu
|
||||||
|
{
|
||||||
|
CGRect rect = self.view.frame;
|
||||||
|
rect.origin.x = 0;
|
||||||
|
rect.origin.y = 0;
|
||||||
|
|
||||||
|
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
|
||||||
|
{
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
|
||||||
|
{
|
||||||
|
// For some reasons in landscape below the status bar is considered y=0, but in portrait it's considered y=20
|
||||||
|
rect.origin.x = (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) ? 0 : STATUS_BAR_HEIGHT;
|
||||||
|
rect.size.width = self.view.frame.size.width-STATUS_BAR_HEIGHT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// For some reasons in landscape below the status bar is considered y=0, but in portrait it's considered y=20
|
||||||
|
rect.origin.y = (self.interfaceOrientation == UIInterfaceOrientationPortrait) ? STATUS_BAR_HEIGHT : 0;
|
||||||
|
rect.size.height = self.view.frame.size.height-STATUS_BAR_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)prepareMenuForReveal:(Menu)menu
|
||||||
|
{
|
||||||
|
// Only prepare menu if it has changed (ex: from MenuLeft to MenuRight or vice versa)
|
||||||
|
if (self.lastRevealedMenu && menu == self.lastRevealedMenu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
UIViewController *menuViewController = (menu == MenuLeft) ? self.leftMenu : self.rightMenu;
|
||||||
|
UIViewController *removingMenuViewController = (menu == MenuLeft) ? self.rightMenu : self.leftMenu;
|
||||||
|
|
||||||
|
self.lastRevealedMenu = menu;
|
||||||
|
|
||||||
|
[removingMenuViewController.view removeFromSuperview];
|
||||||
|
[self.view.window insertSubview:menuViewController.view atIndex:0];
|
||||||
|
|
||||||
|
[self updateMenuFrameAndTransformAccordingToOrientation];
|
||||||
|
|
||||||
|
[self.menuRevealAnimator prepareMenuForAnimation:menu];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)horizontalLocation
|
||||||
|
{
|
||||||
|
CGRect rect = self.view.frame;
|
||||||
|
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
||||||
|
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
||||||
|
{
|
||||||
|
return rect.origin.x;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
|
{
|
||||||
|
return (orientation == UIInterfaceOrientationLandscapeRight)
|
||||||
|
? rect.origin.y
|
||||||
|
: rect.origin.y*-1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (orientation == UIInterfaceOrientationPortrait)
|
||||||
|
? rect.origin.x
|
||||||
|
: rect.origin.x*-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)horizontalSize
|
||||||
|
{
|
||||||
|
CGRect rect = self.view.frame;
|
||||||
|
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
||||||
|
|
||||||
|
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
||||||
|
{
|
||||||
|
return rect.size.width;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
|
{
|
||||||
|
return rect.size.height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return rect.size.width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu
|
||||||
|
{
|
||||||
|
[self postNotificationWithName:name forMenu:menu withExtParams:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu withExtParams:(NSDictionary *)extParams
|
||||||
|
{
|
||||||
|
NSMutableDictionary *userInfo = extParams ? [extParams mutableCopy] : [NSMutableDictionary dictionary];
|
||||||
|
|
||||||
|
NSString *menuString = (menu == MenuLeft) ? NOTIFICATION_USER_INFO_MENU_LEFT : NOTIFICATION_USER_INFO_MENU_RIGHT;
|
||||||
|
userInfo[NOTIFICATION_USER_INFO_MENU] = menuString;
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] postNotificationName:name object:nil userInfo:[userInfo copy]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)slideOffset
|
||||||
|
{
|
||||||
|
return (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
|
||||||
|
? self.landscapeSlideOffset
|
||||||
|
: self.portraitSlideOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - IBActions -
|
#pragma mark - IBActions -
|
||||||
|
|
@ -310,7 +698,6 @@ static SlideNavigationController *singletonInstance;
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithCompletion:nil];
|
||||||
else
|
else
|
||||||
[self openMenu:MenuLeft withCompletion:nil];
|
[self openMenu:MenuLeft withCompletion:nil];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)righttMenuSelected:(id)sender
|
- (void)righttMenuSelected:(id)sender
|
||||||
|
|
@ -328,58 +715,77 @@ static SlideNavigationController *singletonInstance;
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithCompletion:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
|
||||||
|
{
|
||||||
|
if (self.panGestureSideOffset == 0)
|
||||||
|
return YES;
|
||||||
|
|
||||||
|
CGPoint pointInView = [touch locationInView:self.view];
|
||||||
|
CGFloat horizontalSize = [self horizontalSize];
|
||||||
|
|
||||||
|
return (pointInView.x <= self.panGestureSideOffset || pointInView.x >= horizontalSize - self.panGestureSideOffset)
|
||||||
|
? YES
|
||||||
|
: NO;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)panDetected:(UIPanGestureRecognizer *)aPanRecognizer
|
- (void)panDetected:(UIPanGestureRecognizer *)aPanRecognizer
|
||||||
{
|
{
|
||||||
static NSInteger velocityForFollowingDirection = 1000;
|
|
||||||
|
|
||||||
CGPoint translation = [aPanRecognizer translationInView:aPanRecognizer.view];
|
CGPoint translation = [aPanRecognizer translationInView:aPanRecognizer.view];
|
||||||
CGPoint velocity = [aPanRecognizer velocityInView:aPanRecognizer.view];
|
CGPoint velocity = [aPanRecognizer velocityInView:aPanRecognizer.view];
|
||||||
|
NSInteger movement = translation.x - self.draggingPoint.x;
|
||||||
|
|
||||||
|
Menu currentMenu;
|
||||||
|
|
||||||
|
if (self.horizontalLocation > 0)
|
||||||
|
currentMenu = MenuLeft;
|
||||||
|
else if (self.horizontalLocation < 0)
|
||||||
|
currentMenu = MenuRight;
|
||||||
|
else
|
||||||
|
currentMenu = (translation.x > 0) ? MenuLeft : MenuRight;
|
||||||
|
|
||||||
|
// if (![self shouldDisplayMenu:currentMenu forViewController:self.topViewController])
|
||||||
|
// return;
|
||||||
|
|
||||||
|
[self prepareMenuForReveal:currentMenu];
|
||||||
|
|
||||||
if (aPanRecognizer.state == UIGestureRecognizerStateBegan)
|
if (aPanRecognizer.state == UIGestureRecognizerStateBegan)
|
||||||
{
|
{
|
||||||
self.draggingPoint = translation;
|
self.draggingPoint = translation;
|
||||||
}
|
}
|
||||||
else if (aPanRecognizer.state == UIGestureRecognizerStateChanged)
|
else if (aPanRecognizer.state == UIGestureRecognizerStateChanged)
|
||||||
{
|
{
|
||||||
NSInteger movement = translation.x - self.draggingPoint.x;
|
static CGFloat lastHorizontalLocation = 0;
|
||||||
CGRect rect = self.view.frame;
|
CGFloat newHorizontalLocation = [self horizontalLocation];
|
||||||
rect.origin.x += movement;
|
lastHorizontalLocation = newHorizontalLocation;
|
||||||
|
newHorizontalLocation += movement;
|
||||||
|
|
||||||
if (rect.origin.x >= self.minXForDragging && rect.origin.x <= self.maxXForDragging)
|
if (newHorizontalLocation >= self.minXForDragging && newHorizontalLocation <= self.maxXForDragging)
|
||||||
self.view.frame = rect;
|
[self moveHorizontallyToLocation:newHorizontalLocation];
|
||||||
|
|
||||||
self.draggingPoint = translation;
|
self.draggingPoint = translation;
|
||||||
|
|
||||||
if (rect.origin.x > 0)
|
|
||||||
{
|
|
||||||
[self.righMenu.view removeFromSuperview];
|
|
||||||
[self.view.window insertSubview:self.leftMenu.view atIndex:0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[self.leftMenu.view removeFromSuperview];
|
|
||||||
[self.view.window insertSubview:self.righMenu.view atIndex:0];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (aPanRecognizer.state == UIGestureRecognizerStateEnded)
|
else if (aPanRecognizer.state == UIGestureRecognizerStateEnded)
|
||||||
{
|
{
|
||||||
NSInteger currentX = self.view.frame.origin.x;
|
NSInteger currentX = [self horizontalLocation];
|
||||||
NSInteger currentXOffset = (currentX > 0) ? currentX : currentX * -1;
|
NSInteger currentXOffset = (currentX > 0) ? currentX : currentX * -1;
|
||||||
NSInteger positiveVelocity = (velocity.x > 0) ? velocity.x : velocity.x * -1;
|
NSInteger positiveVelocity = (velocity.x > 0) ? velocity.x : velocity.x * -1;
|
||||||
|
|
||||||
// If the speed is high enough follow direction
|
// If the speed is high enough follow direction
|
||||||
if (positiveVelocity >= velocityForFollowingDirection)
|
if (positiveVelocity >= MENU_FAST_VELOCITY_FOR_SWIPE_FOLLOW_DIRECTION)
|
||||||
{
|
{
|
||||||
|
Menu menu = (velocity.x > 0) ? MenuLeft : MenuRight;
|
||||||
|
|
||||||
// Moving Right
|
// Moving Right
|
||||||
if (velocity.x > 0)
|
if (velocity.x > 0)
|
||||||
{
|
{
|
||||||
if (currentX > 0)
|
if (currentX > 0)
|
||||||
{
|
{
|
||||||
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight withCompletion:nil];
|
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
||||||
|
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[self closeMenuWithDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
|
[self closeMenuWithCompletion:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Moving Left
|
// Moving Left
|
||||||
|
|
@ -387,23 +793,21 @@ static SlideNavigationController *singletonInstance;
|
||||||
{
|
{
|
||||||
if (currentX > 0)
|
if (currentX > 0)
|
||||||
{
|
{
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithCompletion:nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Menu menu = (velocity.x > 0) ? MenuLeft : MenuRight;
|
|
||||||
|
|
||||||
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
||||||
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight withDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
|
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (currentXOffset < self.view.frame.size.width/2)
|
if (currentXOffset < (self.horizontalSize - self.slideOffset)/2)
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithCompletion:nil];
|
||||||
else
|
else
|
||||||
[self openMenu:(currentX > 0) ? MenuLeft : MenuRight withCompletion:nil];
|
[self openMenu:(currentX > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -412,7 +816,7 @@ static SlideNavigationController *singletonInstance;
|
||||||
{
|
{
|
||||||
if ([self shouldDisplayMenu:MenuRight forViewController:self.topViewController])
|
if ([self shouldDisplayMenu:MenuRight forViewController:self.topViewController])
|
||||||
{
|
{
|
||||||
return (self.view.frame.size.width - MENU_OFFSET) * -1;
|
return (self.horizontalSize - self.slideOffset) * -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -422,7 +826,7 @@ static SlideNavigationController *singletonInstance;
|
||||||
{
|
{
|
||||||
if ([self shouldDisplayMenu:MenuLeft forViewController:self.topViewController])
|
if ([self shouldDisplayMenu:MenuLeft forViewController:self.topViewController])
|
||||||
{
|
{
|
||||||
return self.view.frame.size.width - MENU_OFFSET;
|
return self.horizontalSize - self.slideOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -432,29 +836,30 @@ static SlideNavigationController *singletonInstance;
|
||||||
|
|
||||||
- (UITapGestureRecognizer *)tapRecognizer
|
- (UITapGestureRecognizer *)tapRecognizer
|
||||||
{
|
{
|
||||||
if (!tapRecognizer)
|
if (!_tapRecognizer)
|
||||||
{
|
{
|
||||||
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
|
_tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
return tapRecognizer;
|
return _tapRecognizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIPanGestureRecognizer *)panRecognizer
|
- (UIPanGestureRecognizer *)panRecognizer
|
||||||
{
|
{
|
||||||
if (!panRecognizer)
|
if (!_panRecognizer)
|
||||||
{
|
{
|
||||||
panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:)];
|
_panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:)];
|
||||||
|
_panRecognizer.delegate = self;
|
||||||
}
|
}
|
||||||
|
|
||||||
return panRecognizer;
|
return _panRecognizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setEnableSwipeGesture:(BOOL)markEnableSwipeGesture
|
- (void)setEnableSwipeGesture:(BOOL)markEnableSwipeGesture
|
||||||
{
|
{
|
||||||
enableSwipeGesture = markEnableSwipeGesture;
|
_enableSwipeGesture = markEnableSwipeGesture;
|
||||||
|
|
||||||
if (enableSwipeGesture)
|
if (_enableSwipeGesture)
|
||||||
{
|
{
|
||||||
[self.view addGestureRecognizer:self.panRecognizer];
|
[self.view addGestureRecognizer:self.panRecognizer];
|
||||||
}
|
}
|
||||||
|
|
@ -464,4 +869,25 @@ static SlideNavigationController *singletonInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setMenuRevealAnimator:(id<SlideNavigationContorllerAnimator>)menuRevealAnimator
|
||||||
|
{
|
||||||
|
[self.menuRevealAnimator clear];
|
||||||
|
|
||||||
|
_menuRevealAnimator = menuRevealAnimator;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setLeftMenu:(UIViewController *)leftMenu
|
||||||
|
{
|
||||||
|
[_leftMenu.view removeFromSuperview];
|
||||||
|
|
||||||
|
_leftMenu = leftMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setRightMenu:(UIViewController *)rightMenu
|
||||||
|
{
|
||||||
|
[_rightMenu.view removeFromSuperview];
|
||||||
|
|
||||||
|
_rightMenu = rightMenu;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,507 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="2519" systemVersion="12A206j" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="2">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4514" systemVersion="13B42" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="fvh-p2-tUE">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="1856"/>
|
<deployment defaultVersion="1536" identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3746"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
<!--class Prefix:identifier View Controller-->
|
<!--Left Menu View Controller-->
|
||||||
<scene sceneID="4">
|
<scene sceneID="ydh-RY-veO">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="2" customClass="ViewController" sceneMemberID="viewController">
|
<viewController storyboardIdentifier="LeftMenuViewController" id="kgk-ix-az4" customClass="LeftMenuViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="5">
|
<layoutGuides>
|
||||||
<rect key="frame" x="0.0" y="20" width="768" height="1004"/>
|
<viewControllerLayoutGuide type="top" id="Gne-ia-o3b"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<viewControllerLayoutGuide type="bottom" id="E2D-Nd-pgy"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="M6Q-7c-6B8">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="4iS-Z1-naI">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<inset key="insetFor6xAndEarlier" minX="0.0" minY="20" maxX="0.0" maxY="0.0"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="leftMenuCell" textLabel="EoR-3O-t6M" style="IBUITableViewCellStyleDefault" id="dX0-0J-330">
|
||||||
|
<rect key="frame" x="0.0" y="22" width="768" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="dX0-0J-330" id="ypG-Nr-fsT">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Home" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="EoR-3O-t6M">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="738" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<fontDescription key="fontDescription" name="Georgia-Bold" family="Georgia" pointSize="16"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="highlightedColor" red="0.0039215688589999999" green="0.29803922770000002" blue="0.39607846740000002" alpha="1" colorSpace="deviceRGB"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<inset key="separatorInset" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<sections/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="kgk-ix-az4" id="KPu-Yn-RVq"/>
|
||||||
|
<outlet property="delegate" destination="kgk-ix-az4" id="Q2S-FC-4x0"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
</view>
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="tableView" destination="4iS-Z1-naI" id="wIU-s8-EUP"/>
|
||||||
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="3" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="MPB-tk-CfT" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-463" y="-315"/>
|
||||||
|
</scene>
|
||||||
|
<!--Slide Navigation Controller-->
|
||||||
|
<scene sceneID="ai6-Og-ggg">
|
||||||
|
<objects>
|
||||||
|
<navigationController definesPresentationContext="YES" id="fvh-p2-tUE" customClass="SlideNavigationController" sceneMemberID="viewController">
|
||||||
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="s4t-1u-9Dt">
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</navigationBar>
|
||||||
|
<connections>
|
||||||
|
<segue destination="WYD-AW-Tad" kind="relationship" relationship="rootViewController" id="ZlM-E3-32S"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="ZVX-Wl-Kro" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="11" y="49"/>
|
||||||
|
</scene>
|
||||||
|
<!--Home View Controller - Home-->
|
||||||
|
<scene sceneID="jok-Y9-nsU">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="HomeViewController" id="V7R-1j-qkE" customClass="HomeViewController" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="4h0-Bw-69Q"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="XXp-Rh-R4b"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="htL-MX-nZg">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bn4-DT-fWK">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YJC-mw-uA1">
|
||||||
|
<rect key="frame" x="3" y="14" width="76" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Push">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<segue destination="4Fv-uA-OED" kind="push" id="iN9-Ny-5e8"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Slide out animation during switch" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="150" translatesAutoresizingMaskIntoConstraints="NO" id="BGW-VE-r3c">
|
||||||
|
<rect key="frame" x="14" y="64" width="150" height="51"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xi7-6L-7LP">
|
||||||
|
<rect key="frame" x="675" y="14" width="89" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Bounce Me">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="bounceMenu:" destination="V7R-1j-qkE" eventType="touchUpInside" id="AYn-Cd-Qms"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="K17-M3-fdi">
|
||||||
|
<rect key="frame" x="671" y="74" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="slideOutAnimationSwitchChanged:" destination="V7R-1j-qkE" eventType="valueChanged" id="mPq-Ey-Wdr"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Limit swipe gesture to sides" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="150" translatesAutoresizingMaskIntoConstraints="NO" id="Nud-ee-xnr">
|
||||||
|
<rect key="frame" x="14" y="238" width="150" height="51"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="JE0-yY-a3F">
|
||||||
|
<rect key="frame" x="671" y="248" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="limitPanGestureSwitchChanged:" destination="V7R-1j-qkE" eventType="valueChanged" id="Fhj-16-CRo"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xSS-jz-TCM">
|
||||||
|
<rect key="frame" x="287" y="14" width="141" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Change Animation">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="changeAnimationSelected:" destination="V7R-1j-qkE" eventType="touchUpInside" id="Xka-WC-m6i"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Shadow" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="150" translatesAutoresizingMaskIntoConstraints="NO" id="3EQ-6K-9U6">
|
||||||
|
<rect key="frame" x="14" y="130" width="150" height="38"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="Drh-pH-upM">
|
||||||
|
<rect key="frame" x="671" y="131" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="shadowSwitchSelected:" destination="V7R-1j-qkE" eventType="valueChanged" id="DT2-s9-ln1"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Swipe Gesture" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="150" translatesAutoresizingMaskIntoConstraints="NO" id="q9w-JO-G4u">
|
||||||
|
<rect key="frame" x="14" y="184" width="150" height="38"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="dCe-up-lMi">
|
||||||
|
<rect key="frame" x="671" y="187" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="enablePanGestureSelected:" destination="V7R-1j-qkE" eventType="valueChanged" id="af0-3l-eWL"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Portrait slide offset" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="150" translatesAutoresizingMaskIntoConstraints="NO" id="trx-fk-BuJ">
|
||||||
|
<rect key="frame" x="9" y="303" width="150" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="qmn-1J-Alb">
|
||||||
|
<rect key="frame" x="221" y="344" width="301" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="60 pixels"/>
|
||||||
|
<segment title="120 pixels"/>
|
||||||
|
<segment title="200 pixels"/>
|
||||||
|
</segments>
|
||||||
|
<connections>
|
||||||
|
<action selector="portraitSlideOffsetChanged:" destination="V7R-1j-qkE" eventType="valueChanged" id="21Z-jo-Gba"/>
|
||||||
|
</connections>
|
||||||
|
</segmentedControl>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Landscape slide offset" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="203" translatesAutoresizingMaskIntoConstraints="NO" id="6aZ-Gf-WRx">
|
||||||
|
<rect key="frame" x="9" y="379" width="203" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="PTv-Ml-qnn">
|
||||||
|
<rect key="frame" x="221" y="421" width="301" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="60 pixels"/>
|
||||||
|
<segment title="120 pixels"/>
|
||||||
|
<segment title="200 pixels"/>
|
||||||
|
</segments>
|
||||||
|
<connections>
|
||||||
|
<action selector="landscapeSlideOffsetChanged:" destination="V7R-1j-qkE" eventType="valueChanged" id="3xw-Wg-hC0"/>
|
||||||
|
</connections>
|
||||||
|
</segmentedControl>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Home" id="DIi-Oq-839"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="landscapeSlideOffsetSegment" destination="PTv-Ml-qnn" id="jEx-Gi-nSR"/>
|
||||||
|
<outlet property="limitPanGestureSwitch" destination="JE0-yY-a3F" id="AbJ-cJ-5yT"/>
|
||||||
|
<outlet property="panGestureSwitch" destination="dCe-up-lMi" id="hBX-fq-WuG"/>
|
||||||
|
<outlet property="portraitSlideOffsetSegment" destination="qmn-1J-Alb" id="Rs5-ve-XJQ"/>
|
||||||
|
<outlet property="scrollView" destination="bn4-DT-fWK" id="MuQ-al-NSa"/>
|
||||||
|
<outlet property="shadowSwitch" destination="Drh-pH-upM" id="tYN-aW-vSs"/>
|
||||||
|
<outlet property="slideOutAnimationSwitch" destination="K17-M3-fdi" id="lGb-Wv-cE6"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="Ti6-YK-HS7" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1040" y="-222"/>
|
||||||
|
</scene>
|
||||||
|
<!--View Controller - No Menu-->
|
||||||
|
<scene sceneID="vPh-ap-UX3">
|
||||||
|
<objects>
|
||||||
|
<viewController id="4Fv-uA-OED" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="pmx-IK-i2u"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="cGA-iU-ukc"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="rRI-CF-NSd">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="No Menu" id="vf8-FK-eVo">
|
||||||
|
<barButtonItem key="rightBarButtonItem" id="wha-vg-KIJ">
|
||||||
|
<segmentedControl key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="NPp-E6-6Ki">
|
||||||
|
<rect key="frame" x="209" y="8" width="95" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="Seg 1"/>
|
||||||
|
<segment title="Seg 2"/>
|
||||||
|
</segments>
|
||||||
|
</segmentedControl>
|
||||||
|
</barButtonItem>
|
||||||
|
</navigationItem>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="4or-Zf-ZK4" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1503" y="-222"/>
|
||||||
|
</scene>
|
||||||
|
<!--View Controller - Login-->
|
||||||
|
<scene sceneID="6xM-VD-IjZ">
|
||||||
|
<objects>
|
||||||
|
<viewController id="WYD-AW-Tad" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="iw1-SG-CVt"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="r3s-gZ-c3b"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="9Q5-n4-47C">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Fake Username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="YBV-ip-gT9">
|
||||||
|
<rect key="frame" x="37" y="82" width="236" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<textInputTraits key="textInputTraits"/>
|
||||||
|
</textField>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Fake Password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Ee7-zg-0Cb">
|
||||||
|
<rect key="frame" x="37" y="139" width="236" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<textInputTraits key="textInputTraits"/>
|
||||||
|
</textField>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FDT-CQ-1Pc">
|
||||||
|
<rect key="frame" x="37" y="200" width="70" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Login">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<segue destination="V7R-1j-qkE" kind="push" id="gTa-tR-axC"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Login" id="eie-6f-3Sp"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="7sy-BR-PJy" kind="push" identifier="FakeSegue" id="NSn-aH-3F1"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="TnG-uB-kKy" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="499" y="49"/>
|
||||||
|
</scene>
|
||||||
|
<!--Profile View Controller - Profile-->
|
||||||
|
<scene sceneID="vdg-mb-ElN">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="ProfileViewController" id="7sy-BR-PJy" customClass="ProfileViewController" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="VZj-K9-2cU"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="rY3-Co-AMw"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="5pS-iy-m6Z">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Rck-5P-us4">
|
||||||
|
<rect key="frame" x="92" y="178" width="153" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Push To Another PAge">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<segue destination="QUW-hd-dmf" kind="push" identifier="RightMenuOnlySegue" id="GjH-qI-P13"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="oRi-zj-G0a">
|
||||||
|
<rect key="frame" x="85" y="111" width="151" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="random"/>
|
||||||
|
<segment title="?"/>
|
||||||
|
</segments>
|
||||||
|
</segmentedControl>
|
||||||
|
<slider opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="ZK1-N5-ujV">
|
||||||
|
<rect key="frame" x="37" y="260" width="216" height="34"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
</slider>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Profile" id="rim-Qb-Z9f"/>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="B48-94-l8v" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1044" y="437"/>
|
||||||
|
</scene>
|
||||||
|
<!--Friends View Controller - Friends-->
|
||||||
|
<scene sceneID="nFD-Fx-IfT">
|
||||||
|
<objects>
|
||||||
|
<tableViewController storyboardIdentifier="FriendsViewController" title="Friends" id="02e-ia-H3p" customClass="FriendsViewController" sceneMemberID="viewController">
|
||||||
|
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="mf9-Md-XTT">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="friendCell" textLabel="mHc-QQ-efC" style="IBUITableViewCellStyleDefault" id="xWi-Fb-kBs">
|
||||||
|
<rect key="frame" x="0.0" y="86" width="768" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xWi-Fb-kBs" id="AiF-6v-P9b">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="735" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="mHc-QQ-efC">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="718" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="18"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<segue destination="ib7-4p-iWa" kind="push" id="pcr-1g-E2h"/>
|
||||||
|
</connections>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<sections/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="02e-ia-H3p" id="tRf-va-vVe"/>
|
||||||
|
<outlet property="delegate" destination="02e-ia-H3p" id="3Bt-bh-0FR"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
||||||
|
</tableViewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="biJ-dS-Jqa" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1042" y="1101"/>
|
||||||
|
</scene>
|
||||||
|
<!--View Controller - Friends-->
|
||||||
|
<scene sceneID="O22-q0-G0O">
|
||||||
|
<objects>
|
||||||
|
<viewController title="Friends" id="ib7-4p-iWa" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="PUj-JX-Dzd"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="aX0-ol-52a"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="NwL-Q3-bld">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Friend Info goes here" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6pu-bb-UuH">
|
||||||
|
<rect key="frame" x="107" y="43" width="163" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Friend Info" id="87E-5u-pRC"/>
|
||||||
|
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="OO8-ID-dwE" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1503" y="1100"/>
|
||||||
|
</scene>
|
||||||
|
<!--Profile Detail View Controller - Right Menu Only-->
|
||||||
|
<scene sceneID="rfM-Ud-q6T">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="ProfileDetailViewController" id="QUW-hd-dmf" customClass="ProfileDetailViewController" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="Cih-DQ-MER"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="fhz-Is-192"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="uIL-wB-Qgi">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Right Menu Only" id="DCN-Kk-ZXw"/>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="tHH-ZU-dK5" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1503" y="437"/>
|
||||||
|
</scene>
|
||||||
|
<!--Right Menu View Controller-->
|
||||||
|
<scene sceneID="BnH-4A-xKd">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="RightMenuViewController" id="s8Z-d6-pPO" customClass="RightMenuViewController" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="4FB-gt-Glo"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="uy1-kw-buA"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="LxO-RZ-XYJ">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="WhB-Xa-VUc">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<inset key="insetFor6xAndEarlier" minX="0.0" minY="20" maxX="0.0" maxY="0.0"/>
|
||||||
|
<color key="sectionIndexTrackingBackgroundColor" red="0.83529418710000003" green="0.77647066119999997" blue="0.9450981021" alpha="1" colorSpace="deviceRGB"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="rightMenuCell" textLabel="TLA-lN-Jhv" style="IBUITableViewCellStyleDefault" id="QhH-j0-Isk">
|
||||||
|
<rect key="frame" x="0.0" y="22" width="768" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="QhH-j0-Isk" id="2zc-I9-pbt">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="768" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Home" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="TLA-lN-Jhv">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="738" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<fontDescription key="fontDescription" name="Georgia-Bold" family="Georgia" pointSize="16"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="highlightedColor" red="0.0039215688589999999" green="0.29803922770000002" blue="0.39607846740000002" alpha="1" colorSpace="deviceRGB"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<inset key="separatorInset" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<sections/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="s8Z-d6-pPO" id="puK-Mm-G9d"/>
|
||||||
|
<outlet property="delegate" destination="s8Z-d6-pPO" id="xLR-zN-vmb"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="tableView" destination="WhB-Xa-VUc" id="YeN-Ln-HCq"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="eku-Gd-3ad" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-458" y="371"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||||
<simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
|
<simulatedStatusBarMetrics key="statusBar"/>
|
||||||
<simulatedOrientationMetrics key="orientation"/>
|
<simulatedOrientationMetrics key="orientation"/>
|
||||||
<simulatedScreenMetrics key="destination"/>
|
<simulatedScreenMetrics key="destination"/>
|
||||||
</simulatedMetricsContainer>
|
</simulatedMetricsContainer>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,60 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="2840" systemVersion="12D78" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="yzD-f0-X8n">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6250" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="yzD-f0-X8n">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="1926"/>
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
|
<!--Left Menu View Controller-->
|
||||||
|
<scene sceneID="BMU-5d-Lvz">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="LeftMenuViewController" id="L46-bH-G45" customClass="LeftMenuViewController" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="1Ck-cx-0Lt">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="T7T-Ke-Ksy">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<inset key="insetFor6xAndEarlier" minX="0.0" minY="20" maxX="0.0" maxY="0.0"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="leftMenuCell" textLabel="nmX-lO-eSN" style="IBUITableViewCellStyleDefault" id="cLE-GR-3Mi">
|
||||||
|
<rect key="frame" x="0.0" y="22" width="320" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cLE-GR-3Mi" id="mlz-xO-oOg">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Home" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="nmX-lO-eSN">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="290" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<fontDescription key="fontDescription" name="Georgia-Bold" family="Georgia" pointSize="16"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="highlightedColor" red="0.0039215688593685627" green="0.29803922772407532" blue="0.39607846736907959" alpha="1" colorSpace="deviceRGB"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<inset key="separatorInset" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<sections/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="L46-bH-G45" id="aGb-Bg-zmt"/>
|
||||||
|
<outlet property="delegate" destination="L46-bH-G45" id="GKZ-XN-Tto"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="tableView" destination="T7T-Ke-Ksy" id="fWu-ZN-ex0"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="uR4-tD-X8j" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-463" y="-315"/>
|
||||||
|
</scene>
|
||||||
<!--Slide Navigation Controller-->
|
<!--Slide Navigation Controller-->
|
||||||
<scene sceneID="cQY-wH-O5O">
|
<scene sceneID="cQY-wH-O5O">
|
||||||
<objects>
|
<objects>
|
||||||
|
|
@ -12,61 +63,183 @@
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="mAB-md-uek" kind="relationship" relationship="rootViewController" id="z8d-Ml-dpq"/>
|
<segue destination="Rnc-YT-XEu" kind="relationship" relationship="rootViewController" id="Hu2-ne-r2J"/>
|
||||||
<segue destination="nrg-5w-bbF" kind="push" identifier="ProfileSegue" id="VVC-UO-FWZ"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</navigationController>
|
</navigationController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="3Qg-wo-U2C" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="3Qg-wo-U2C" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="11" y="49"/>
|
<point key="canvasLocation" x="11" y="49"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Home View Controller - Home-->
|
<!--Home-->
|
||||||
<scene sceneID="7Hl-22-JcN">
|
<scene sceneID="7Hl-22-JcN">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController storyboardIdentifier="HomeViewController" id="mAB-md-uek" customClass="HomeViewController" sceneMemberID="viewController">
|
<viewController storyboardIdentifier="HomeViewController" id="mAB-md-uek" customClass="HomeViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="KmS-nM-BIh">
|
<view key="view" contentMode="scaleToFill" id="KmS-nM-BIh">
|
||||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0tp-7h-5YK">
|
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="fw2-L4-XnY">
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<state key="normal" title="Button">
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||||
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
<subviews>
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="K2W-o4-sG6">
|
||||||
</state>
|
<rect key="frame" x="3" y="14" width="76" height="30"/>
|
||||||
<state key="highlighted">
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<state key="normal" title="Push">
|
||||||
</state>
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<connections>
|
</state>
|
||||||
<segue destination="Tha-f2-JWx" kind="push" identifier="NoMenuSegue" id="jGs-V7-na4"/>
|
<connections>
|
||||||
</connections>
|
<segue destination="Tha-f2-JWx" kind="push" id="zQY-ZW-dzI"/>
|
||||||
</button>
|
</connections>
|
||||||
|
</button>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide out animation during switch" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="LiR-hw-Ca7">
|
||||||
|
<rect key="frame" x="14" y="64" width="150" height="51"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="RbN-zf-ZQc">
|
||||||
|
<rect key="frame" x="227" y="14" width="89" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Bounce Me">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="bounceMenu:" destination="mAB-md-uek" eventType="touchUpInside" id="6Xu-R9-337"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" id="2Kd-PQ-dMg">
|
||||||
|
<rect key="frame" x="223" y="74" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="slideOutAnimationSwitchChanged:" destination="mAB-md-uek" eventType="valueChanged" id="Qf2-se-eTN"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Limit swipe gesture to sides" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Zjt-Sm-dG4">
|
||||||
|
<rect key="frame" x="14" y="238" width="150" height="51"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" id="83S-hQ-cXn">
|
||||||
|
<rect key="frame" x="223" y="248" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="limitPanGestureSwitchChanged:" destination="mAB-md-uek" eventType="valueChanged" id="6Hk-Za-6bX"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="t7b-5z-Suv">
|
||||||
|
<rect key="frame" x="82" y="14" width="141" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Change Animation">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="changeAnimationSelected:" destination="mAB-md-uek" eventType="touchUpInside" id="g8g-m8-C4D"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Shadow" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="u77-ra-SzU">
|
||||||
|
<rect key="frame" x="14" y="130" width="150" height="38"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" id="PZ2-xm-500">
|
||||||
|
<rect key="frame" x="223" y="131" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="shadowSwitchSelected:" destination="mAB-md-uek" eventType="valueChanged" id="eqk-Qq-BQi"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Swipe Gesture" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="k2w-0I-RLF">
|
||||||
|
<rect key="frame" x="14" y="184" width="150" height="38"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" id="EFN-Hx-p9d">
|
||||||
|
<rect key="frame" x="223" y="187" width="51" height="31"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="enablePanGestureSelected:" destination="mAB-md-uek" eventType="valueChanged" id="TYZ-ji-eFO"/>
|
||||||
|
</connections>
|
||||||
|
</switch>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Portrait slide offset" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="URw-TY-n72">
|
||||||
|
<rect key="frame" x="9" y="303" width="150" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" id="3av-wh-d4N">
|
||||||
|
<rect key="frame" x="9" y="344" width="301" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="60 pixels"/>
|
||||||
|
<segment title="120 pixels"/>
|
||||||
|
<segment title="200 pixels"/>
|
||||||
|
</segments>
|
||||||
|
<connections>
|
||||||
|
<action selector="portraitSlideOffsetChanged:" destination="mAB-md-uek" eventType="valueChanged" id="WVY-3r-Evr"/>
|
||||||
|
</connections>
|
||||||
|
</segmentedControl>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Landscape slide offset" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Y2u-M6-whd">
|
||||||
|
<rect key="frame" x="9" y="379" width="203" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" id="WQG-lp-diK">
|
||||||
|
<rect key="frame" x="9" y="421" width="301" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<segments>
|
||||||
|
<segment title="60 pixels"/>
|
||||||
|
<segment title="120 pixels"/>
|
||||||
|
<segment title="200 pixels"/>
|
||||||
|
</segments>
|
||||||
|
<connections>
|
||||||
|
<action selector="landscapeSlideOffsetChanged:" destination="mAB-md-uek" eventType="valueChanged" id="0Y9-hw-fq3"/>
|
||||||
|
</connections>
|
||||||
|
</segmentedControl>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</scrollView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="0tp-7h-5YK" firstAttribute="top" secondItem="KmS-nM-BIh" secondAttribute="top" constant="96" id="my8-MJ-mEI"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="0tp-7h-5YK" secondAttribute="trailing" constant="87" id="s5F-Qo-4kK"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
</view>
|
||||||
<navigationItem key="navigationItem" title="Home" id="YV6-8b-6Lr"/>
|
<navigationItem key="navigationItem" title="Home" id="YV6-8b-6Lr"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="landscapeSlideOffsetSegment" destination="WQG-lp-diK" id="bG4-OD-XTb"/>
|
||||||
|
<outlet property="limitPanGestureSwitch" destination="83S-hQ-cXn" id="eBw-Fv-dnh"/>
|
||||||
|
<outlet property="panGestureSwitch" destination="EFN-Hx-p9d" id="8Cd-Ve-wnb"/>
|
||||||
|
<outlet property="portraitSlideOffsetSegment" destination="3av-wh-d4N" id="4qf-ty-x48"/>
|
||||||
|
<outlet property="scrollView" destination="fw2-L4-XnY" id="OLy-l8-yd4"/>
|
||||||
|
<outlet property="shadowSwitch" destination="PZ2-xm-500" id="50a-xL-hzV"/>
|
||||||
|
<outlet property="slideOutAnimationSwitch" destination="2Kd-PQ-dMg" id="XTh-Lw-KJw"/>
|
||||||
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Wf8-rc-ajb" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="Wf8-rc-ajb" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="552" y="-204"/>
|
<point key="canvasLocation" x="1040" y="-222"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--View Controller - No Menu-->
|
<!--No Menu-->
|
||||||
<scene sceneID="b5b-is-lY2">
|
<scene sceneID="b5b-is-lY2">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="Tha-f2-JWx" sceneMemberID="viewController">
|
<viewController id="Tha-f2-JWx" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="Fks-yk-ua6">
|
<view key="view" contentMode="scaleToFill" id="Fks-yk-ua6">
|
||||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
</view>
|
</view>
|
||||||
<navigationItem key="navigationItem" title="No Menu" id="k71-Cl-mOP">
|
<navigationItem key="navigationItem" title="No Menu" id="k71-Cl-mOP">
|
||||||
<barButtonItem key="rightBarButtonItem" id="NgO-HE-8LY">
|
<barButtonItem key="rightBarButtonItem" id="NgO-HE-8LY">
|
||||||
<segmentedControl key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="nE8-Dp-UZR">
|
<segmentedControl key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="nE8-Dp-UZR">
|
||||||
<rect key="frame" x="220" y="6" width="95" height="32"/>
|
<rect key="frame" x="209" y="8" width="95" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<segments>
|
<segments>
|
||||||
<segment title="Seg 1"/>
|
<segment title="Seg 1"/>
|
||||||
|
|
@ -78,131 +251,166 @@
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="LfU-9k-SWv" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="LfU-9k-SWv" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1015" y="-204"/>
|
<point key="canvasLocation" x="1503" y="-222"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Profile View Controller - Profile-->
|
<!--Login-->
|
||||||
|
<scene sceneID="fe8-Xu-DEa">
|
||||||
|
<objects>
|
||||||
|
<viewController id="Rnc-YT-XEu" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="qy8-tT-LdF">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Fake Username" minimumFontSize="17" id="e9E-0E-u4L">
|
||||||
|
<rect key="frame" x="37" y="82" width="236" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<textInputTraits key="textInputTraits"/>
|
||||||
|
</textField>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Fake Password" minimumFontSize="17" id="1li-i4-fu1">
|
||||||
|
<rect key="frame" x="37" y="139" width="236" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<textInputTraits key="textInputTraits"/>
|
||||||
|
</textField>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="w0t-va-Gly">
|
||||||
|
<rect key="frame" x="37" y="200" width="70" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Login">
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<segue destination="mAB-md-uek" kind="push" id="FfU-Zw-oz1"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Login" id="huN-S6-yGa"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="nrg-5w-bbF" kind="push" identifier="FakeSegue" id="Rkp-YM-Gz0"/>
|
||||||
|
<segue destination="qY1-Jo-UbZ" kind="push" identifier="FakeSegue33" id="37q-Mo-UFN"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="QC9-GK-F3v" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="499" y="49"/>
|
||||||
|
</scene>
|
||||||
|
<!--Profile-->
|
||||||
<scene sceneID="xeE-nX-pb6">
|
<scene sceneID="xeE-nX-pb6">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController storyboardIdentifier="ProfileViewController" id="nrg-5w-bbF" customClass="ProfileViewController" sceneMemberID="viewController">
|
<viewController storyboardIdentifier="ProfileViewController" id="nrg-5w-bbF" customClass="ProfileViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="nXC-Mu-u90">
|
<view key="view" contentMode="scaleToFill" id="nXC-Mu-u90">
|
||||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="coh-kj-UCb">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="coh-kj-UCb">
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<rect key="frame" x="92" y="178" width="153" height="30"/>
|
||||||
<state key="normal" title="Button">
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
<state key="normal" title="Push To Another PAge">
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</state>
|
</state>
|
||||||
<state key="highlighted">
|
|
||||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</state>
|
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="BLR-mt-TZ9" kind="push" identifier="RightMenuOnlySegue" id="yr9-GK-Pwl"/>
|
<segue destination="BLR-mt-TZ9" kind="push" identifier="RightMenuOnlySegue" id="yr9-GK-Pwl"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="liN-HX-4nb">
|
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" id="liN-HX-4nb">
|
||||||
|
<rect key="frame" x="85" y="111" width="151" height="29"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<segments>
|
<segments>
|
||||||
<segment title="First"/>
|
<segment title="random"/>
|
||||||
<segment title="Second"/>
|
<segment title="?"/>
|
||||||
</segments>
|
</segments>
|
||||||
</segmentedControl>
|
</segmentedControl>
|
||||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="5Jz-Yy-2WY">
|
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" id="5Jz-Yy-2WY">
|
||||||
<constraints>
|
<rect key="frame" x="37" y="260" width="216" height="34"/>
|
||||||
<constraint firstAttribute="width" constant="114" id="49B-Qz-2Hc"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
</constraints>
|
|
||||||
</slider>
|
</slider>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="5Jz-Yy-2WY" firstAttribute="top" secondItem="nXC-Mu-u90" secondAttribute="top" constant="251" id="1zS-Ah-2Hz"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="5Jz-Yy-2WY" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="Ein-yb-hQ0"/>
|
|
||||||
<constraint firstItem="liN-HX-4nb" firstAttribute="leading" secondItem="nXC-Mu-u90" secondAttribute="leading" constant="26" id="mDt-La-5IM"/>
|
|
||||||
<constraint firstItem="liN-HX-4nb" firstAttribute="top" secondItem="nXC-Mu-u90" secondAttribute="top" constant="32" id="odl-3V-5WW"/>
|
|
||||||
<constraint firstItem="coh-kj-UCb" firstAttribute="top" secondItem="nXC-Mu-u90" secondAttribute="top" constant="116" id="r8I-zY-MHB"/>
|
|
||||||
<constraint firstItem="coh-kj-UCb" firstAttribute="leading" secondItem="nXC-Mu-u90" secondAttribute="leading" constant="143" id="wxy-h2-ep0"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
</view>
|
||||||
<navigationItem key="navigationItem" title="Profile" id="cIB-4y-aS6"/>
|
<navigationItem key="navigationItem" title="Profile" id="cIB-4y-aS6"/>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="BIU-qR-dGC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="BIU-qR-dGC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="556" y="455"/>
|
<point key="canvasLocation" x="1044" y="437"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Menu View Controller-->
|
<!--Friends-->
|
||||||
<scene sceneID="jnp-rY-eNb">
|
<scene sceneID="Hbs-BS-FvF">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController storyboardIdentifier="MenuViewController" id="Fo7-mQ-36d" customClass="MenuViewController" sceneMemberID="viewController">
|
<tableViewController storyboardIdentifier="FriendsViewController" title="Friends" id="qY1-Jo-UbZ" customClass="FriendsViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="SGn-Wf-7bo">
|
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="ZVX-Ox-mWb">
|
||||||
<rect key="frame" x="0.0" y="20" width="320" height="548"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="friendCell" textLabel="iWQ-vV-pDm" style="IBUITableViewCellStyleDefault" id="iJ3-ci-bMv">
|
||||||
|
<rect key="frame" x="0.0" y="86" width="320" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="iJ3-ci-bMv" id="c95-tX-Iz4">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="287" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iWQ-vV-pDm">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="270" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="18"/>
|
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<segue destination="yDw-XY-MRH" kind="push" id="f0p-1d-Bw3"/>
|
||||||
|
</connections>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<sections/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="qY1-Jo-UbZ" id="1YL-S4-gBv"/>
|
||||||
|
<outlet property="delegate" destination="qY1-Jo-UbZ" id="FT7-ey-Dka"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
<navigationItem key="navigationItem" id="aah-ni-z8T">
|
||||||
|
<barButtonItem key="rightBarButtonItem" title="Random Button" id="UsL-My-2Pu"/>
|
||||||
|
</navigationItem>
|
||||||
|
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
||||||
|
</tableViewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="TeQ-ZL-OLP" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1042" y="1101"/>
|
||||||
|
</scene>
|
||||||
|
<!--Friends-->
|
||||||
|
<scene sceneID="yJW-sY-3g9">
|
||||||
|
<objects>
|
||||||
|
<viewController title="Friends" id="yDw-XY-MRH" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="iHZ-lt-TwS">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="sDo-qF-VCh">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Friend Info goes here" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="fYW-yF-XIJ">
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<rect key="frame" x="107" y="43" width="163" height="21"/>
|
||||||
<prototypes>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="rightMenuCell" textLabel="xb6-XA-Fp2" style="IBUITableViewCellStyleDefault" id="xqJ-Km-cL1">
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<rect key="frame" x="0.0" y="22" width="320" height="44"/>
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<nil key="highlightedColor"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
</label>
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Home" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xb6-XA-Fp2">
|
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="43"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
|
|
||||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
|
||||||
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
|
||||||
</view>
|
|
||||||
</tableViewCell>
|
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="leftMenuCell" textLabel="4Da-Pk-Ol7" style="IBUITableViewCellStyleDefault" id="WPD-BV-qjw">
|
|
||||||
<rect key="frame" x="0.0" y="66" width="320" height="44"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Home" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="4Da-Pk-Ol7">
|
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="43"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
|
|
||||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
|
||||||
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
|
||||||
</view>
|
|
||||||
</tableViewCell>
|
|
||||||
</prototypes>
|
|
||||||
<sections/>
|
|
||||||
<connections>
|
|
||||||
<outlet property="dataSource" destination="Fo7-mQ-36d" id="SUU-1c-fBe"/>
|
|
||||||
<outlet property="delegate" destination="Fo7-mQ-36d" id="djZ-ur-Eos"/>
|
|
||||||
</connections>
|
|
||||||
</tableView>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" red="0.96439273969999995" green="1" blue="0.19383566830000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="sDo-qF-VCh" firstAttribute="bottom" secondItem="SGn-Wf-7bo" secondAttribute="bottom" type="default" id="CIM-le-06X"/>
|
|
||||||
<constraint firstItem="sDo-qF-VCh" firstAttribute="top" secondItem="SGn-Wf-7bo" secondAttribute="top" type="default" id="Prl-0H-WcZ"/>
|
|
||||||
<constraint firstItem="sDo-qF-VCh" firstAttribute="trailing" secondItem="SGn-Wf-7bo" secondAttribute="trailing" type="default" id="tMP-ja-deS"/>
|
|
||||||
<constraint firstItem="sDo-qF-VCh" firstAttribute="leading" secondItem="SGn-Wf-7bo" secondAttribute="leading" type="default" id="zHf-8s-rjt"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Friend Info" id="ZvF-si-2WZ"/>
|
||||||
|
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="93v-6G-gvs" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="5rh-jR-0iE" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="-508" y="63"/>
|
<point key="canvasLocation" x="1503" y="1100"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Profile Detail View Controller - Right Menu Only-->
|
<!--Right Menu Only-->
|
||||||
<scene sceneID="w1a-xD-Zgv">
|
<scene sceneID="w1a-xD-Zgv">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController storyboardIdentifier="ProfileDetailViewController" id="BLR-mt-TZ9" customClass="ProfileDetailViewController" sceneMemberID="viewController">
|
<viewController storyboardIdentifier="ProfileDetailViewController" id="BLR-mt-TZ9" customClass="ProfileDetailViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="pd3-of-ZHU">
|
<view key="view" contentMode="scaleToFill" id="pd3-of-ZHU">
|
||||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -210,32 +418,63 @@
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="zoB-W7-tIa" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="zoB-W7-tIa" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1015" y="455"/>
|
<point key="canvasLocation" x="1503" y="437"/>
|
||||||
|
</scene>
|
||||||
|
<!--Right Menu View Controller-->
|
||||||
|
<scene sceneID="4D0-hr-unv">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="RightMenuViewController" id="CkC-Jl-7gs" customClass="RightMenuViewController" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="PkA-11-xcs">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="rxo-EL-mMo">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<inset key="insetFor6xAndEarlier" minX="0.0" minY="20" maxX="0.0" maxY="0.0"/>
|
||||||
|
<color key="sectionIndexTrackingBackgroundColor" red="0.83529418710000003" green="0.77647066119999997" blue="0.9450981021" alpha="1" colorSpace="deviceRGB"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="rightMenuCell" textLabel="M7n-za-tWm" style="IBUITableViewCellStyleDefault" id="MFj-zm-kmh">
|
||||||
|
<rect key="frame" x="0.0" y="22" width="320" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="MFj-zm-kmh" id="Z1m-Cs-KLm">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Home" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="M7n-za-tWm">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="290" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<fontDescription key="fontDescription" name="Georgia-Bold" family="Georgia" pointSize="16"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="highlightedColor" red="0.0039215688589999999" green="0.29803922770000002" blue="0.39607846740000002" alpha="1" colorSpace="deviceRGB"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<inset key="separatorInset" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<sections/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="CkC-Jl-7gs" id="r1f-eU-lMH"/>
|
||||||
|
<outlet property="delegate" destination="CkC-Jl-7gs" id="z1c-4e-B0J"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="tableView" destination="rxo-EL-mMo" id="coH-OC-YF2"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dgu-27-ZWK" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-458" y="371"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<classes>
|
|
||||||
<class className="HomeViewController" superclassName="UIViewController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/HomeViewController.h"/>
|
|
||||||
</class>
|
|
||||||
<class className="MenuViewController" superclassName="UIViewController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/MenuViewController.h"/>
|
|
||||||
</class>
|
|
||||||
<class className="NSLayoutConstraint" superclassName="NSObject">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/NSLayoutConstraint.h"/>
|
|
||||||
</class>
|
|
||||||
<class className="ProfileDetailViewController" superclassName="UIViewController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/ProfileDetailViewController.h"/>
|
|
||||||
</class>
|
|
||||||
<class className="ProfileViewController" superclassName="UIViewController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/ProfileViewController.h"/>
|
|
||||||
</class>
|
|
||||||
<class className="SlideNavigationController" superclassName="UINavigationController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/SlideNavigationController.h"/>
|
|
||||||
</class>
|
|
||||||
</classes>
|
|
||||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||||
<simulatedStatusBarMetrics key="statusBar"/>
|
<simulatedStatusBarMetrics key="statusBar"/>
|
||||||
<simulatedOrientationMetrics key="orientation"/>
|
<simulatedOrientationMetrics key="orientation"/>
|
||||||
<simulatedScreenMetrics key="destination" type="retina4"/>
|
<simulatedScreenMetrics key="destination" type="retina4"/>
|
||||||
</simulatedMetricsContainer>
|
</simulatedMetricsContainer>
|
||||||
</document>
|
</document>
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@
|
||||||
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <SenTestingKit/SenTestingKit.h>
|
#import <XCTest/XCTest.h>
|
||||||
|
|
||||||
@interface SlideMenuTests : SenTestCase
|
@interface SlideMenuTests : XCTestCase
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
- (void)testExample
|
- (void)testExample
|
||||||
{
|
{
|
||||||
STFail(@"Unit tests are not implemented yet in SlideMenuTests");
|
XCTFail(@"Unit tests are not implemented yet in SlideMenuTests");
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = 'iOS-Slide-Menu'
|
s.name = 'iOS-Slide-Menu'
|
||||||
s.version = '1.0.1'
|
s.version = '1.4.6'
|
||||||
s.summary = 'A Slide Menu for iOS'
|
s.summary = 'A Slide Menu for iOS'
|
||||||
s.homepage = 'https://github.com/aryaxt/iOS-Slide-Menu'
|
s.homepage = 'https://github.com/aryaxt/iOS-Slide-Menu'
|
||||||
s.license = {
|
s.license = {
|
||||||
:type => 'MIT',
|
:type => 'MIT',
|
||||||
:file => 'License.txt'
|
:file => 'License.txt'
|
||||||
}
|
}
|
||||||
s.author = {'Aryan Gh' => 'https://github.com/aryaxt/iOS-Slide-Menu'}
|
s.author = {'Aryan Ghassemi' => 'https://github.com/aryaxt/iOS-Slide-Menu'}
|
||||||
s.source = {:git => 'https://github.com/aryaxt/iOS-Slide-Menu.git', :tag => '1.0.1'}
|
s.source = {:git => 'https://github.com/aryaxt/iOS-Slide-Menu.git', :tag => '1.4.6'}
|
||||||
s.platform = :ios, '6.0'
|
s.platform = :ios, '6.0'
|
||||||
s.source_files = 'SlideMenu/Source/*.{h,m}'
|
s.source_files = 'SlideMenu/Source/*.{h,m}', 'SlideMenu/Source/Animations/*.{h,m}'
|
||||||
s.resources = ['SlideMenu/Source/Assets/**/*']
|
s.resources = ['SlideMenu/Source/Assets/**/*']
|
||||||
s.framework = 'Foundation', 'UIKit'
|
s.framework = 'Foundation', 'UIKit'
|
||||||
s.requires_arc = true
|
s.requires_arc = true
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
Loading…
Reference in New Issue