Compare commits
No commits in common. "master" and "1.4.1" have entirely different histories.
34
README.md
34
README.md
|
|
@ -3,11 +3,11 @@ 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, with configurable buttons, reveal animations, and tap/swiper gesture recognizers.
|
||||||
|
|
||||||
- [Setup](https://github.com/aryaxt/iOS-Slide-Menu#setup)
|
- [Setup](https://github.com/aryaxt/iOS-Slide-Menu#setup)
|
||||||
|
- [Switch ViewController](https://github.com/aryaxt/iOS-Slide-Menu#switch-between-viewcontrollers)
|
||||||
- [Enable/Disable Left/Right Menu](https://github.com/aryaxt/iOS-Slide-Menu#configuring-left-and-right-menu-for-different-viewcontrollers)
|
- [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 Properties](https://github.com/aryaxt/iOS-Slide-Menu#public-properties)
|
||||||
- [Public Methods](https://github.com/aryaxt/iOS-Slide-Menu#public-methods)
|
- [Public Methods](https://github.com/aryaxt/iOS-Slide-Menu#public-methods)
|
||||||
- [Custom Animations](https://github.com/aryaxt/iOS-Slide-Menu#custom-animations)
|
- [Custom Animations](https://github.com/aryaxt/iOS-Slide-Menu#custom-animations)
|
||||||
- [Notifications](https://github.com/aryaxt/iOS-Slide-Menu#notifications)
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -33,18 +33,25 @@ 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 *rightMenu = [[RightMenuViewController alloc] init];
|
RightMenuViewController *righMenu = [[RightMenuViewController alloc] init];
|
||||||
|
|
||||||
[SlideNavigationController sharedInstance].rightMenu = rightMenu;
|
[SlideNavigationController sharedInstance].righMenu = 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.
|
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
|
||||||
|
|
@ -96,10 +103,6 @@ Behaves exactly the same as leftbarButtonItem, but it's used as the right button
|
||||||
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
|
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
|
###### 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
|
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
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
|
@ -172,18 +175,3 @@ This method gets called as the menu reveal occurs, and passes the progress to be
|
||||||
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.
|
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
|
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,6 +18,7 @@
|
||||||
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 */; };
|
||||||
|
|
@ -69,7 +70,8 @@
|
||||||
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.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideMenuTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
15371F081728E3B400A508F4 /* SlideMenuTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideMenuTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
15371F091728E3B400A508F4 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
15371F111728E3B400A508F4 /* SlideMenuTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SlideMenuTests-Info.plist"; sourceTree = "<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>"; };
|
||||||
|
|
@ -124,6 +126,7 @@
|
||||||
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 */,
|
||||||
);
|
);
|
||||||
|
|
@ -146,7 +149,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
15371EDE1728E3B400A508F4 /* SlideMenu.app */,
|
15371EDE1728E3B400A508F4 /* SlideMenu.app */,
|
||||||
15371F081728E3B400A508F4 /* SlideMenuTests.xctest */,
|
15371F081728E3B400A508F4 /* SlideMenuTests.octest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -158,6 +161,7 @@
|
||||||
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>";
|
||||||
|
|
@ -314,8 +318,8 @@
|
||||||
);
|
);
|
||||||
name = SlideMenuTests;
|
name = SlideMenuTests;
|
||||||
productName = SlideMenuTests;
|
productName = SlideMenuTests;
|
||||||
productReference = 15371F081728E3B400A508F4 /* SlideMenuTests.xctest */;
|
productReference = 15371F081728E3B400A508F4 /* SlideMenuTests.octest */;
|
||||||
productType = "com.apple.product-type.bundle.unit-test";
|
productType = "com.apple.product-type.bundle";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
|
@ -323,7 +327,6 @@
|
||||||
15371ED51728E3B400A508F4 /* Project object */ = {
|
15371ED51728E3B400A508F4 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastTestingUpgradeCheck = 0600;
|
|
||||||
LastUpgradeCheck = 0500;
|
LastUpgradeCheck = 0500;
|
||||||
ORGANIZATIONNAME = "Aryan Ghassemi";
|
ORGANIZATIONNAME = "Aryan Ghassemi";
|
||||||
};
|
};
|
||||||
|
|
@ -525,7 +528,6 @@
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
@ -537,7 +539,6 @@
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
@ -550,13 +551,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;
|
||||||
};
|
};
|
||||||
|
|
@ -567,13 +568,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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@
|
||||||
|
|
||||||
[SlideNavigationController sharedInstance].rightMenu = 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
|
// Creating a custom bar button for right menu
|
||||||
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
|
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
|
||||||
|
|
@ -32,26 +31,6 @@
|
||||||
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
|
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
|
||||||
[SlideNavigationController sharedInstance].rightBarButtonItem = rightBarButtonItem;
|
[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;
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)slideNavigationControllerShouldDisplayRightMenu
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
{
|
{
|
||||||
return 20;
|
return 20;
|
||||||
|
|
@ -28,7 +33,7 @@
|
||||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
{
|
{
|
||||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friendCell"];
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friendCell"];
|
||||||
cell.textLabel.text = [NSString stringWithFormat:@"Friend %ld", (long)indexPath.row];
|
cell.textLabel.text = [NSString stringWithFormat:@"Friend %d", indexPath.row];
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,9 @@
|
||||||
|
|
||||||
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"leftMenu.jpg"]];
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"leftMenu.jpg"]];
|
||||||
self.tableView.backgroundView = imageView;
|
self.tableView.backgroundView = imageView;
|
||||||
|
|
||||||
|
self.view.layer.borderWidth = .6;
|
||||||
|
self.view.layer.borderColor = [UIColor lightGrayColor].CGColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UITableView Delegate & Datasrouce -
|
#pragma mark - UITableView Delegate & Datasrouce -
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,9 @@
|
||||||
|
|
||||||
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"rightMenu.jpg"]];
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"rightMenu.jpg"]];
|
||||||
self.tableView.backgroundView = imageView;
|
self.tableView.backgroundView = imageView;
|
||||||
|
|
||||||
|
self.view.layer.borderWidth = .6;
|
||||||
|
self.view.layer.borderColor = [UIColor lightGrayColor].CGColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UITableView Delegate & Datasrouce -
|
#pragma mark - UITableView Delegate & Datasrouce -
|
||||||
|
|
@ -80,38 +83,31 @@
|
||||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
{
|
{
|
||||||
id <SlideNavigationContorllerAnimator> revealAnimator;
|
id <SlideNavigationContorllerAnimator> revealAnimator;
|
||||||
CGFloat animationDuration = 0;
|
|
||||||
|
|
||||||
switch (indexPath.row)
|
switch (indexPath.row)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
revealAnimator = nil;
|
revealAnimator = nil;
|
||||||
animationDuration = .19;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
revealAnimator = [[SlideNavigationContorllerAnimatorSlide alloc] init];
|
revealAnimator = [[SlideNavigationContorllerAnimatorSlide alloc] init];
|
||||||
animationDuration = .19;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
revealAnimator = [[SlideNavigationContorllerAnimatorFade alloc] init];
|
revealAnimator = [[SlideNavigationContorllerAnimatorFade alloc] init];
|
||||||
animationDuration = .18;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
revealAnimator = [[SlideNavigationContorllerAnimatorSlideAndFade alloc] initWithMaximumFadeAlpha:.8 fadeColor:[UIColor blackColor] andSlideMovement:100];
|
revealAnimator = [[SlideNavigationContorllerAnimatorSlideAndFade alloc] initWithMaximumFadeAlpha:.8 fadeColor:[UIColor blackColor] andSlideMovement:100];
|
||||||
animationDuration = .19;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
revealAnimator = [[SlideNavigationContorllerAnimatorScale alloc] init];
|
revealAnimator = [[SlideNavigationContorllerAnimatorScale alloc] init];
|
||||||
animationDuration = .22;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
revealAnimator = [[SlideNavigationContorllerAnimatorScaleAndFade alloc] initWithMaximumFadeAlpha:.6 fadeColor:[UIColor blackColor] andMinimumScale:.8];
|
revealAnimator = [[SlideNavigationContorllerAnimatorScaleAndFade alloc] initWithMaximumFadeAlpha:.6 fadeColor:[UIColor blackColor] andMinimumScale:.8];
|
||||||
animationDuration = .22;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
@ -119,7 +115,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
[[SlideNavigationController sharedInstance] closeMenuWithCompletion:^{
|
[[SlideNavigationController sharedInstance] closeMenuWithCompletion:^{
|
||||||
[SlideNavigationController sharedInstance].menuRevealAnimationDuration = animationDuration;
|
|
||||||
[SlideNavigationController sharedInstance].menuRevealAnimator = revealAnimator;
|
[SlideNavigationController sharedInstance].menuRevealAnimator = revealAnimator;
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -33,11 +33,11 @@
|
||||||
|
|
||||||
- (id)init
|
- (id)init
|
||||||
{
|
{
|
||||||
if (self = [self initWithSlideMovement:100])
|
if (self = [self initWithSlideMovement:100])
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithSlideMovement:(CGFloat)slideMovement
|
- (id)initWithSlideMovement:(CGFloat)slideMovement
|
||||||
|
|
@ -55,119 +55,98 @@
|
||||||
- (void)prepareMenuForAnimation:(Menu)menu
|
- (void)prepareMenuForAnimation:(Menu)menu
|
||||||
{
|
{
|
||||||
UIViewController *menuViewController = (menu == MenuLeft)
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
? [SlideNavigationController sharedInstance].leftMenu
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
: [SlideNavigationController sharedInstance].rightMenu;
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
||||||
CGRect rect = menuViewController.view.frame;
|
CGRect rect = menuViewController.view.frame;
|
||||||
|
|
||||||
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
{
|
{
|
||||||
rect.origin.x = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
if (orientation == UIInterfaceOrientationLandscapeRight)
|
||||||
}
|
{
|
||||||
else
|
rect.origin.y = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
{
|
}
|
||||||
if (UIInterfaceOrientationIsLandscape(orientation))
|
else
|
||||||
{
|
{
|
||||||
if (orientation == UIInterfaceOrientationLandscapeRight)
|
rect.origin.y = (menu == MenuRight) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
{
|
}
|
||||||
rect.origin.y = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
if (orientation == UIInterfaceOrientationPortrait)
|
||||||
rect.origin.y = (menu == MenuRight) ? self.slideMovement*-1 : self.slideMovement;
|
{
|
||||||
}
|
rect.origin.x = (menu == MenuLeft) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (orientation == UIInterfaceOrientationPortrait)
|
rect.origin.x = (menu == MenuRight) ? self.slideMovement*-1 : self.slideMovement;
|
||||||
{
|
}
|
||||||
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;
|
menuViewController.view.frame = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress
|
||||||
{
|
{
|
||||||
UIViewController *menuViewController = (menu == MenuLeft)
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
? [SlideNavigationController sharedInstance].leftMenu
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
: [SlideNavigationController sharedInstance].rightMenu;
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
UIInterfaceOrientation orientation = [SlideNavigationController sharedInstance].interfaceOrientation;
|
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
||||||
|
|
||||||
NSInteger location = (menu == MenuLeft)
|
NSInteger location = (menu == MenuLeft)
|
||||||
? (self.slideMovement * -1) + (self.slideMovement * progress)
|
? (self.slideMovement * -1) + (self.slideMovement * progress)
|
||||||
: (self.slideMovement * (1-progress));
|
: (self.slideMovement * (1-progress));
|
||||||
|
|
||||||
if (menu == MenuLeft)
|
if (menu == MenuLeft)
|
||||||
location = (location > 0) ? 0 : location;
|
location = (location > 0) ? 0 : location;
|
||||||
|
|
||||||
if (menu == MenuRight)
|
if (menu == MenuRight)
|
||||||
location = (location < 0) ? 0 : location;
|
location = (location < 0) ? 0 : location;
|
||||||
|
|
||||||
CGRect rect = menuViewController.view.frame;
|
CGRect rect = menuViewController.view.frame;
|
||||||
|
|
||||||
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
{
|
{
|
||||||
rect.origin.x = location;
|
rect.origin.y = (orientation == UIInterfaceOrientationLandscapeRight) ? location : location*-1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (UIInterfaceOrientationIsLandscape(orientation))
|
rect.origin.x = (orientation == UIInterfaceOrientationPortrait) ? location : location*-1;
|
||||||
{
|
}
|
||||||
rect.origin.y = (orientation == UIInterfaceOrientationLandscapeRight) ? location : location*-1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rect.origin.x = (orientation == UIInterfaceOrientationPortrait) ? location : location*-1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
menuViewController.view.frame = rect;
|
menuViewController.view.frame = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clear
|
- (void)clear
|
||||||
{
|
{
|
||||||
[self clearMenu:MenuLeft];
|
[self clearMenu:MenuLeft];
|
||||||
[self clearMenu:MenuRight];
|
[self clearMenu:MenuRight];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Private Method -
|
#pragma mark - Private Method -
|
||||||
|
|
||||||
- (void)clearMenu:(Menu)menu
|
- (void)clearMenu:(Menu)menu
|
||||||
{
|
{
|
||||||
UIViewController *menuViewController = (menu == MenuLeft)
|
UIViewController *menuViewController = (menu == MenuLeft)
|
||||||
? [SlideNavigationController sharedInstance].leftMenu
|
? [SlideNavigationController sharedInstance].leftMenu
|
||||||
: [SlideNavigationController sharedInstance].rightMenu;
|
: [SlideNavigationController sharedInstance].rightMenu;
|
||||||
|
|
||||||
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
UIInterfaceOrientation orientation= [SlideNavigationController sharedInstance].interfaceOrientation;
|
||||||
|
|
||||||
CGRect rect = menuViewController.view.frame;
|
CGRect rect = menuViewController.view.frame;
|
||||||
|
|
||||||
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
{
|
{
|
||||||
rect.origin.x = 0;
|
rect.origin.y = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (UIInterfaceOrientationIsLandscape(orientation))
|
rect.origin.x = 0;
|
||||||
{
|
}
|
||||||
rect.origin.y = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rect.origin.x = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
menuViewController.view.frame = rect;
|
menuViewController.view.frame = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,6 @@
|
||||||
#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;
|
||||||
|
|
@ -44,12 +42,6 @@ typedef enum{
|
||||||
@protocol SlideNavigationContorllerAnimator;
|
@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, assign) BOOL enableShadow;
|
@property (nonatomic, assign) BOOL enableShadow;
|
||||||
|
|
@ -60,9 +52,6 @@ extern NSString *const SlideMenuOpenAfterSwipeKey;
|
||||||
@property (nonatomic, assign) CGFloat portraitSlideOffset;
|
@property (nonatomic, assign) CGFloat portraitSlideOffset;
|
||||||
@property (nonatomic, assign) CGFloat landscapeSlideOffset;
|
@property (nonatomic, assign) CGFloat landscapeSlideOffset;
|
||||||
@property (nonatomic, assign) CGFloat panGestureSideOffset;
|
@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;
|
@property (nonatomic, strong) id <SlideNavigationContorllerAnimator> menuRevealAnimator;
|
||||||
|
|
||||||
+ (SlideNavigationController *)sharedInstance;
|
+ (SlideNavigationController *)sharedInstance;
|
||||||
|
|
@ -78,6 +67,4 @@ extern NSString *const SlideMenuOpenAfterSwipeKey;
|
||||||
- (void)toggleRightMenu;
|
- (void)toggleRightMenu;
|
||||||
- (BOOL)isMenuOpen;
|
- (BOOL)isMenuOpen;
|
||||||
|
|
||||||
- (void)prepareMenuForReveal:(Menu)menu;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -38,21 +38,12 @@ typedef enum {
|
||||||
@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) Menu lastRevealedMenu;
|
||||||
@property (nonatomic, assign) BOOL menuNeedsLayout;
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation SlideNavigationController
|
@implementation SlideNavigationController
|
||||||
|
|
||||||
NSString * const SlideNavigationControllerDidOpen = @"SlideNavigationControllerDidOpen";
|
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
|
||||||
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_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_QUICK_SLIDE_ANIMATION_DURATION .18
|
||||||
#define MENU_IMAGE @"menu-button"
|
#define MENU_IMAGE @"menu-button"
|
||||||
#define MENU_SHADOW_RADIUS 10
|
#define MENU_SHADOW_RADIUS 10
|
||||||
|
|
@ -60,9 +51,6 @@ NSString *const SlideMenuOpenAfterSwipeKey = @"SlideMenuOpenAfterSwipeKey";
|
||||||
#define MENU_DEFAULT_SLIDE_OFFSET 60
|
#define MENU_DEFAULT_SLIDE_OFFSET 60
|
||||||
#define MENU_FAST_VELOCITY_FOR_SWIPE_FOLLOW_DIRECTION 1200
|
#define MENU_FAST_VELOCITY_FOR_SWIPE_FOLLOW_DIRECTION 1200
|
||||||
#define STATUS_BAR_HEIGHT 20
|
#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;
|
||||||
|
|
||||||
|
|
@ -106,16 +94,6 @@ static SlideNavigationController *singletonInstance;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass
|
|
||||||
{
|
|
||||||
if (self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:toolbarClass])
|
|
||||||
{
|
|
||||||
[self setup];
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setup
|
- (void)setup
|
||||||
{
|
{
|
||||||
if (singletonInstance)
|
if (singletonInstance)
|
||||||
|
|
@ -123,9 +101,6 @@ static SlideNavigationController *singletonInstance;
|
||||||
|
|
||||||
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.landscapeSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
|
||||||
self.portraitSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
|
self.portraitSlideOffset = MENU_DEFAULT_SLIDE_OFFSET;
|
||||||
self.panGestureSideOffset = 0;
|
self.panGestureSideOffset = 0;
|
||||||
|
|
@ -142,39 +117,31 @@ static SlideNavigationController *singletonInstance;
|
||||||
// Update shadow size of enabled
|
// Update shadow size of enabled
|
||||||
if (self.enableShadow)
|
if (self.enableShadow)
|
||||||
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
|
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
|
||||||
|
|
||||||
// When menu open we disable user interaction
|
|
||||||
// When rotates we want to make sure that userInteraction is enabled again
|
|
||||||
//[self enableTapGestureToCloseMenu:NO];
|
|
||||||
|
|
||||||
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
|
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
|
||||||
{
|
{
|
||||||
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
|
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
|
||||||
|
|
||||||
self.menuNeedsLayout = YES;
|
// When menu open we disable user interaction
|
||||||
|
// When rotates we want to make sure that userInteraction is enabled again
|
||||||
|
[self enableTapGestureToCloseMenu:NO];
|
||||||
|
|
||||||
|
// Avoid an ugnly shadow in background while rotating
|
||||||
|
self.view.layer.shadowOpacity = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
|
||||||
|
{
|
||||||
|
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
|
||||||
|
|
||||||
|
// Update rotation animation
|
||||||
|
[self updateMenuFrameAndTransformAccordingToOrientation];
|
||||||
|
|
||||||
|
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
|
||||||
|
|
||||||
|
// we set shadowOpacity to 0 in willRotateToInterfaceOrientation, after the rotation we want to add the shadow back
|
||||||
|
self.view.layer.shadowOpacity = MENU_SHADOW_OPACITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Public Methods -
|
#pragma mark - Public Methods -
|
||||||
|
|
@ -213,7 +180,8 @@ static SlideNavigationController *singletonInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)switchToViewController:(UIViewController *)viewController
|
- (void)switchToViewController:(UIViewController *)viewController
|
||||||
popType:(PopType)poptype
|
withSlideOutAnimation:(BOOL)slideOutAnimation
|
||||||
|
popType:(PopType)poptype
|
||||||
andCompletion:(void (^)())completion
|
andCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
if (self.avoidSwitchingToSameClassViewController && [self.topViewController isKindOfClass:viewController.class])
|
if (self.avoidSwitchingToSameClassViewController && [self.topViewController isKindOfClass:viewController.class])
|
||||||
|
|
@ -222,86 +190,94 @@ static SlideNavigationController *singletonInstance;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void (^switchAndCallCompletion)(BOOL) = ^(BOOL closeMenuBeforeCallingCompletion) {
|
void (^switchAndCallCompletion)(BOOL) = ^(BOOL closeMenuBeforeCallingCompletion) {
|
||||||
if (poptype == PopTypeAll) {
|
if (poptype == PopTypeAll) {
|
||||||
[self setViewControllers:@[viewController]];
|
[self setViewControllers:@[viewController]];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[super popToRootViewControllerAnimated:NO];
|
[super popToRootViewControllerAnimated:NO];
|
||||||
[super pushViewController:viewController animated:NO];
|
[super pushViewController:viewController animated:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (closeMenuBeforeCallingCompletion)
|
if (closeMenuBeforeCallingCompletion)
|
||||||
{
|
{
|
||||||
[self closeMenuWithCompletion:^{
|
[self closeMenuWithCompletion:^{
|
||||||
if (completion)
|
if (completion)
|
||||||
completion();
|
completion();
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (completion)
|
if (completion)
|
||||||
completion();
|
completion();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// if ([self isMenuOpen])
|
if ([self isMenuOpen])
|
||||||
// {
|
{
|
||||||
// if (slideOutAnimation)
|
if (slideOutAnimation)
|
||||||
// {
|
{
|
||||||
// [UIView animateWithDuration:(slideOutAnimation) ? self.menuRevealAnimationDuration : 0
|
[UIView animateWithDuration:(slideOutAnimation) ? MENU_SLIDE_ANIMATION_DURATION : 0
|
||||||
// delay:0
|
delay:0
|
||||||
// options:self.menuRevealAnimationOption
|
options:UIViewAnimationOptionCurveEaseOut
|
||||||
// animations:^{
|
animations:^{
|
||||||
// CGFloat width = self.horizontalSize;
|
CGFloat width = self.horizontalSize;
|
||||||
// CGFloat moveLocation = (self.horizontalLocation> 0) ? width : -1*width;
|
CGFloat moveLocation = (self.horizontalLocation> 0) ? width : -1*width;
|
||||||
// [self moveHorizontallyToLocation:moveLocation];
|
[self moveHorizontallyToLocation:moveLocation];
|
||||||
// } completion:^(BOOL finished) {
|
} completion:^(BOOL finished) {
|
||||||
// switchAndCallCompletion(YES);
|
switchAndCallCompletion(YES);
|
||||||
// }];
|
}];
|
||||||
// }
|
}
|
||||||
// else
|
else
|
||||||
// {
|
{
|
||||||
// switchAndCallCompletion(YES);
|
switchAndCallCompletion(YES);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// else
|
else
|
||||||
// {
|
{
|
||||||
// switchAndCallCompletion(NO);
|
switchAndCallCompletion(NO);
|
||||||
// }
|
}
|
||||||
|
|
||||||
switchAndCallCompletion([self isMenuOpen]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion
|
- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion];
|
[self switchToViewController:viewController withSlideOutAnimation:YES popType:PopTypeRoot andCompletion:completion];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
|
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
|
||||||
withSlideOutAnimation:(BOOL)slideOutAnimation
|
withSlideOutAnimation:(BOOL)slideOutAnimation
|
||||||
andCompletion:(void (^)())completion
|
andCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion];
|
[self switchToViewController:viewController withSlideOutAnimation:slideOutAnimation popType:PopTypeRoot andCompletion:completion];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
|
- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController
|
||||||
withCompletion:(void (^)())completion
|
withCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self switchToViewController:viewController popType:PopTypeRoot andCompletion:completion];
|
[self switchToViewController:viewController withSlideOutAnimation:YES popType:PopTypeRoot andCompletion:completion];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController
|
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController
|
||||||
withSlideOutAnimation:(BOOL)slideOutAnimation
|
withSlideOutAnimation:(BOOL)slideOutAnimation
|
||||||
andCompletion:(void (^)())completion
|
andCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self switchToViewController:viewController popType:PopTypeAll andCompletion:completion];
|
[self switchToViewController:viewController withSlideOutAnimation:slideOutAnimation popType:PopTypeAll andCompletion:completion];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController
|
- (void)popAllAndSwitchToViewController:(UIViewController *)viewController
|
||||||
withCompletion:(void (^)())completion
|
withCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
[self switchToViewController:viewController popType:PopTypeAll andCompletion:completion];
|
[self switchToViewController:viewController withSlideOutAnimation:YES popType:PopTypeAll andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)closeMenuWithCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self closeMenuWithDuration:MENU_SLIDE_ANIMATION_DURATION andCompletion:completion];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion
|
||||||
|
{
|
||||||
|
[self openMenu:menu withDuration:MENU_SLIDE_ANIMATION_DURATION andCompletion:completion];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)toggleLeftMenu
|
- (void)toggleLeftMenu
|
||||||
|
|
@ -468,30 +444,15 @@ static SlideNavigationController *singletonInstance;
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (CGFloat)openingPart
|
- (void)openMenu:(Menu)menu withDuration:(float)duration andCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
CGFloat slideOffset = self.slideOffset;
|
|
||||||
CGFloat absHorizontalLocation = (CGFloat)fabs(self.horizontalLocation);
|
|
||||||
|
|
||||||
return MIN(1.f, absHorizontalLocation/slideOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)openMenu:(Menu)menu withCompletion:(void (^)())completion
|
|
||||||
{
|
|
||||||
[self openMenu:menu afterSwipe:NO withCompletion:completion];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)openMenu:(Menu)menu afterSwipe:(BOOL)afterSwipe withCompletion:(void (^)())completion
|
|
||||||
{
|
|
||||||
NSTimeInterval duration = self.menuOpenAnimationDuration * (1.f - [self openingPart]);
|
|
||||||
|
|
||||||
[self enableTapGestureToCloseMenu:YES];
|
[self enableTapGestureToCloseMenu:YES];
|
||||||
|
|
||||||
[self prepareMenuForReveal:menu];
|
[self prepareMenuForReveal:menu];
|
||||||
|
|
||||||
[UIView animateWithDuration:duration
|
[UIView animateWithDuration:duration
|
||||||
delay:0
|
delay:0
|
||||||
options:self.menuRevealAnimationOption
|
options:UIViewAnimationOptionCurveEaseOut
|
||||||
animations:^{
|
animations:^{
|
||||||
CGRect rect = self.view.frame;
|
CGRect rect = self.view.frame;
|
||||||
CGFloat width = self.horizontalSize;
|
CGFloat width = self.horizontalSize;
|
||||||
|
|
@ -501,24 +462,16 @@ static SlideNavigationController *singletonInstance;
|
||||||
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)closeMenuWithDuration:(float)duration andCompletion:(void (^)())completion
|
||||||
{
|
{
|
||||||
NSTimeInterval duration = self.menuCloseAnimationDuration * [self openingPart];
|
|
||||||
|
|
||||||
[self enableTapGestureToCloseMenu:NO];
|
[self enableTapGestureToCloseMenu:NO];
|
||||||
|
|
||||||
Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
|
|
||||||
|
|
||||||
[UIView animateWithDuration:duration
|
[UIView animateWithDuration:duration
|
||||||
delay:0
|
delay:0
|
||||||
options:self.menuRevealAnimationOption
|
options:UIViewAnimationOptionCurveEaseOut
|
||||||
animations:^{
|
animations:^{
|
||||||
CGRect rect = self.view.frame;
|
CGRect rect = self.view.frame;
|
||||||
rect.origin.x = 0;
|
rect.origin.x = 0;
|
||||||
|
|
@ -527,8 +480,6 @@ static SlideNavigationController *singletonInstance;
|
||||||
completion:^(BOOL finished) {
|
completion:^(BOOL finished) {
|
||||||
if (completion)
|
if (completion)
|
||||||
completion();
|
completion();
|
||||||
|
|
||||||
[self postNotificationWithName:SlideNavigationControllerDidClose forMenu:menu];
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -538,28 +489,16 @@ static SlideNavigationController *singletonInstance;
|
||||||
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
||||||
Menu menu = (self.horizontalLocation >= 0 && location >= 0) ? MenuLeft : MenuRight;
|
Menu menu = (self.horizontalLocation >= 0 && location >= 0) ? MenuLeft : MenuRight;
|
||||||
|
|
||||||
if ((location > 0 && self.horizontalLocation <= 0) || (location < 0 && self.horizontalLocation >= 0)) {
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
[self postNotificationWithName:SlideNavigationControllerDidReveal forMenu:(location > 0) ? MenuLeft : MenuRight];
|
{
|
||||||
}
|
rect.origin.x = 0;
|
||||||
|
rect.origin.y = (orientation == UIInterfaceOrientationLandscapeRight) ? location : location*-1;
|
||||||
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
}
|
||||||
{
|
else
|
||||||
rect.origin.x = location;
|
{
|
||||||
rect.origin.y = 0;
|
rect.origin.x = (orientation == UIInterfaceOrientationPortrait) ? location : location*-1;
|
||||||
}
|
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.view.frame = rect;
|
||||||
[self updateMenuAnimation:menu];
|
[self updateMenuAnimation:menu];
|
||||||
|
|
@ -580,22 +519,25 @@ static SlideNavigationController *singletonInstance;
|
||||||
rect.origin.x = 0;
|
rect.origin.x = 0;
|
||||||
rect.origin.y = 0;
|
rect.origin.y = 0;
|
||||||
|
|
||||||
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
|
BOOL isIos7 = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0");
|
||||||
{
|
|
||||||
return rect;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
|
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
|
if (!isIos7)
|
||||||
rect.origin.x = (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) ? 0 : STATUS_BAR_HEIGHT;
|
{
|
||||||
rect.size.width = self.view.frame.size.width-STATUS_BAR_HEIGHT;
|
// For some reasons in landscape belos 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
|
else
|
||||||
{
|
{
|
||||||
// For some reasons in landscape below the status bar is considered y=0, but in portrait it's considered y=20
|
if (!isIos7)
|
||||||
rect.origin.y = (self.interfaceOrientation == UIInterfaceOrientationPortrait) ? STATUS_BAR_HEIGHT : 0;
|
{
|
||||||
rect.size.height = self.view.frame.size.height-STATUS_BAR_HEIGHT;
|
// For some reasons in landscape belos 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;
|
return rect;
|
||||||
|
|
@ -625,25 +567,18 @@ static SlideNavigationController *singletonInstance;
|
||||||
CGRect rect = self.view.frame;
|
CGRect rect = self.view.frame;
|
||||||
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
||||||
|
|
||||||
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
{
|
{
|
||||||
return rect.origin.x;
|
return (orientation == UIInterfaceOrientationLandscapeRight)
|
||||||
}
|
? rect.origin.y
|
||||||
else
|
: rect.origin.y*-1;
|
||||||
{
|
}
|
||||||
if (UIInterfaceOrientationIsLandscape(orientation))
|
else
|
||||||
{
|
{
|
||||||
return (orientation == UIInterfaceOrientationLandscapeRight)
|
return (orientation == UIInterfaceOrientationPortrait)
|
||||||
? rect.origin.y
|
? rect.origin.x
|
||||||
: rect.origin.y*-1;
|
: rect.origin.x*-1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
return (orientation == UIInterfaceOrientationPortrait)
|
|
||||||
? rect.origin.x
|
|
||||||
: rect.origin.x*-1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (CGFloat)horizontalSize
|
- (CGFloat)horizontalSize
|
||||||
|
|
@ -651,36 +586,27 @@ static SlideNavigationController *singletonInstance;
|
||||||
CGRect rect = self.view.frame;
|
CGRect rect = self.view.frame;
|
||||||
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
UIInterfaceOrientation orientation = self.interfaceOrientation;
|
||||||
|
|
||||||
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
|
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||||
{
|
{
|
||||||
return rect.size.width;
|
return rect.size.height;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (UIInterfaceOrientationIsLandscape(orientation))
|
return rect.size.width;
|
||||||
{
|
}
|
||||||
return rect.size.height;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return rect.size.width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu
|
#pragma mark - UINavigationControllerDelegate Methods -
|
||||||
|
|
||||||
|
- (void)navigationController:(UINavigationController *)navigationController
|
||||||
|
willShowViewController:(UIViewController *)viewController
|
||||||
|
animated:(BOOL)animated
|
||||||
{
|
{
|
||||||
[self postNotificationWithName:name forMenu:menu withExtParams:nil];
|
if ([self shouldDisplayMenu:MenuLeft forViewController:viewController])
|
||||||
}
|
viewController.navigationItem.leftBarButtonItem = [self barButtonItemForMenu:MenuLeft];
|
||||||
|
|
||||||
- (void)postNotificationWithName:(NSString *)name forMenu:(Menu)menu withExtParams:(NSDictionary *)extParams
|
if ([self shouldDisplayMenu:MenuRight forViewController:viewController])
|
||||||
{
|
viewController.navigationItem.rightBarButtonItem = [self barButtonItemForMenu:MenuRight];
|
||||||
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
|
- (CGFloat)slideOffset
|
||||||
|
|
@ -698,6 +624,7 @@ 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
|
||||||
|
|
@ -743,9 +670,6 @@ static SlideNavigationController *singletonInstance;
|
||||||
else
|
else
|
||||||
currentMenu = (translation.x > 0) ? MenuLeft : MenuRight;
|
currentMenu = (translation.x > 0) ? MenuLeft : MenuRight;
|
||||||
|
|
||||||
// if (![self shouldDisplayMenu:currentMenu forViewController:self.topViewController])
|
|
||||||
// return;
|
|
||||||
|
|
||||||
[self prepareMenuForReveal:currentMenu];
|
[self prepareMenuForReveal:currentMenu];
|
||||||
|
|
||||||
if (aPanRecognizer.state == UIGestureRecognizerStateBegan)
|
if (aPanRecognizer.state == UIGestureRecognizerStateBegan)
|
||||||
|
|
@ -781,11 +705,11 @@ static SlideNavigationController *singletonInstance;
|
||||||
if (currentX > 0)
|
if (currentX > 0)
|
||||||
{
|
{
|
||||||
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
||||||
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil];
|
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight withDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Moving Left
|
// Moving Left
|
||||||
|
|
@ -793,12 +717,12 @@ static SlideNavigationController *singletonInstance;
|
||||||
{
|
{
|
||||||
if (currentX > 0)
|
if (currentX > 0)
|
||||||
{
|
{
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
if ([self shouldDisplayMenu:menu forViewController:self.visibleViewController])
|
||||||
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil];
|
[self openMenu:(velocity.x > 0) ? MenuLeft : MenuRight withDuration:MENU_QUICK_SLIDE_ANIMATION_DURATION andCompletion:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -807,7 +731,7 @@ static SlideNavigationController *singletonInstance;
|
||||||
if (currentXOffset < (self.horizontalSize - self.slideOffset)/2)
|
if (currentXOffset < (self.horizontalSize - self.slideOffset)/2)
|
||||||
[self closeMenuWithCompletion:nil];
|
[self closeMenuWithCompletion:nil];
|
||||||
else
|
else
|
||||||
[self openMenu:(currentX > 0) ? MenuLeft : MenuRight afterSwipe:YES withCompletion:nil];
|
[self openMenu:(currentX > 0) ? MenuLeft : MenuRight withCompletion:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -876,18 +800,4 @@ static SlideNavigationController *singletonInstance;
|
||||||
_menuRevealAnimator = menuRevealAnimator;
|
_menuRevealAnimator = menuRevealAnimator;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setLeftMenu:(UIViewController *)leftMenu
|
|
||||||
{
|
|
||||||
[_leftMenu.view removeFromSuperview];
|
|
||||||
|
|
||||||
_leftMenu = leftMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setRightMenu:(UIViewController *)rightMenu
|
|
||||||
{
|
|
||||||
[_rightMenu.view removeFromSuperview];
|
|
||||||
|
|
||||||
_rightMenu = rightMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<?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="3.0" toolsVersion="6250" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="yzD-f0-X8n">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4514" systemVersion="13B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="yzD-f0-X8n">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment defaultVersion="1536" identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3746"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
<!--Left Menu View Controller-->
|
<!--Left Menu View Controller-->
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="11" y="49"/>
|
<point key="canvasLocation" x="11" y="49"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Home-->
|
<!--Home View Controller - 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">
|
||||||
|
|
@ -227,7 +227,7 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1040" y="-222"/>
|
<point key="canvasLocation" x="1040" y="-222"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--No Menu-->
|
<!--View Controller - 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">
|
||||||
|
|
@ -253,7 +253,7 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1503" y="-222"/>
|
<point key="canvasLocation" x="1503" y="-222"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Login-->
|
<!--View Controller - Login-->
|
||||||
<scene sceneID="fe8-Xu-DEa">
|
<scene sceneID="fe8-Xu-DEa">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="Rnc-YT-XEu" sceneMemberID="viewController">
|
<viewController id="Rnc-YT-XEu" sceneMemberID="viewController">
|
||||||
|
|
@ -289,14 +289,13 @@
|
||||||
<navigationItem key="navigationItem" title="Login" id="huN-S6-yGa"/>
|
<navigationItem key="navigationItem" title="Login" id="huN-S6-yGa"/>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="nrg-5w-bbF" kind="push" identifier="FakeSegue" id="Rkp-YM-Gz0"/>
|
<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>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="QC9-GK-F3v" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="QC9-GK-F3v" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="499" y="49"/>
|
<point key="canvasLocation" x="499" y="49"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Profile-->
|
<!--Profile View Controller - 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">
|
||||||
|
|
@ -335,7 +334,7 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1044" y="437"/>
|
<point key="canvasLocation" x="1044" y="437"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Friends-->
|
<!--Friends View Controller - Friends-->
|
||||||
<scene sceneID="Hbs-BS-FvF">
|
<scene sceneID="Hbs-BS-FvF">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController storyboardIdentifier="FriendsViewController" title="Friends" id="qY1-Jo-UbZ" customClass="FriendsViewController" sceneMemberID="viewController">
|
<tableViewController storyboardIdentifier="FriendsViewController" title="Friends" id="qY1-Jo-UbZ" customClass="FriendsViewController" sceneMemberID="viewController">
|
||||||
|
|
@ -371,16 +370,13 @@
|
||||||
<outlet property="delegate" destination="qY1-Jo-UbZ" id="FT7-ey-Dka"/>
|
<outlet property="delegate" destination="qY1-Jo-UbZ" id="FT7-ey-Dka"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
<navigationItem key="navigationItem" id="aah-ni-z8T">
|
|
||||||
<barButtonItem key="rightBarButtonItem" title="Random Button" id="UsL-My-2Pu"/>
|
|
||||||
</navigationItem>
|
|
||||||
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="TeQ-ZL-OLP" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="TeQ-ZL-OLP" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1042" y="1101"/>
|
<point key="canvasLocation" x="1042" y="1101"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Friends-->
|
<!--View Controller - Friends-->
|
||||||
<scene sceneID="yJW-sY-3g9">
|
<scene sceneID="yJW-sY-3g9">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController title="Friends" id="yDw-XY-MRH" sceneMemberID="viewController">
|
<viewController title="Friends" id="yDw-XY-MRH" sceneMemberID="viewController">
|
||||||
|
|
@ -405,7 +401,7 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1503" y="1100"/>
|
<point key="canvasLocation" x="1503" y="1100"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Right Menu Only-->
|
<!--Profile Detail View Controller - 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">
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@
|
||||||
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
// Copyright (c) 2013 Aryan Ghassemi. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <XCTest/XCTest.h>
|
#import <SenTestingKit/SenTestingKit.h>
|
||||||
|
|
||||||
@interface SlideMenuTests : XCTestCase
|
@interface SlideMenuTests : SenTestCase
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
- (void)testExample
|
- (void)testExample
|
||||||
{
|
{
|
||||||
XCTFail(@"Unit tests are not implemented yet in SlideMenuTests");
|
STFail(@"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.4.6'
|
s.version = '1.4.1'
|
||||||
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 Ghassemi' => 'https://github.com/aryaxt/iOS-Slide-Menu'}
|
s.author = {'Aryan Gh' => 'https://github.com/aryaxt/iOS-Slide-Menu'}
|
||||||
s.source = {:git => 'https://github.com/aryaxt/iOS-Slide-Menu.git', :tag => '1.4.6'}
|
s.source = {:git => 'https://github.com/aryaxt/iOS-Slide-Menu.git', :tag => '1.4.1'}
|
||||||
s.platform = :ios, '6.0'
|
s.platform = :ios, '6.0'
|
||||||
s.source_files = 'SlideMenu/Source/*.{h,m}', 'SlideMenu/Source/Animations/*.{h,m}'
|
s.source_files = 'SlideMenu/Source/*.{h,m}', 'SlideMenu/Source/Animations/*.{h,m}', 'SlideMenu/Source/Assets/*.{png}'
|
||||||
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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue