I have implemented the slide menu but I want sliding effect exactly like facebook. I came across following post on stackoverflow:
iphone facebook side menu using objective c
In which I want to implement the solution given by greenisus (up voted 15 times) but I am having the trouble implementing that, same trouble has been raised by Bot in comments to his answer. "@greenisus I'm confused on how you sent the menu to the back? When I do that it just shows a black side menu." which has not been answered.
It's pretty simple really. First, you need to make a view controller that sits under the one that's visible. You can send that view to the back like this:
[self.view sendSubviewToBack:menuViewController.view];
Then, you put a menu button on the left side of your navigation bar, and write a handler kind of like this:
- (void)menuButtonPressed:(id)sender {
CGRect destination = self.navigationController.view.frame;
if (destination.origin.x > 0) {
destination.origin.x = 0;
} else {
destination.origin.x += 254.5;
}
[UIView animateWithDuration:0.25 animations:^{
self.navigationController.view.frame = destination;
} completion:^(BOOL finished) {
self.view.userInteractionEnabled = !(destination.origin.x > 0);
}];
}
Just want to know when we have to use the following method, the second method is simple and works fine, but doesn't show menu view under it.
[self.view sendSubviewToBack:menuViewController.view];
Looking for some pointers or solution to run the above code correctly.
Actually you should know how can we do it. just add the menuViewController.view as the subView of self.view. But this will cover the navigationController.view, so you can just [self.view sendSubviewToBack:menuViewController.view]. And when you need to show/hide the menuViewController you need to use the method - (void)menuButtonPressed:(id)sender.
In a HomeViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
// be careful with the sequence of the code. If you firstly add the contentViewController and then add the
// menuViewController you need to [self.view sendSubviewToBack:self.menuViewController.view], else you don't
// need to use sendSubviewToBack.
self.menuViewController = [[MenuViewController alloc] init];
self.contentViewController = [[ContentViewController alloc] init];
[self.view addSubview:self.menuViewController.view];
[self.view addSubview:self.contentViewController.view];
}
In ContentViewController:
- (IBAction)showMenu:(id)sender
{
CGRect destination = self.view.frame;
if (destination.origin.x > 0) {
destination.origin.x = 0;
} else {
destination.origin.x += 254.5;
}
[UIView animateWithDuration:0.25 animations:^{
self.view.frame = destination;
} completion:^(BOOL finished) {
//self.view.userInteractionEnabled = !(destination.origin.x > 0);
}];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With