I am pushing a UIViewController in a navigation stack using the following code
[UIView animateWithDuration:0.75
animations:^{
//FirstViewController
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[self.navigationController pushViewController: viewcontroller
animated:NO];
[UIView commitAnimations];
//SecondViewController
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];
Actually the transition should be done like this
//MainView
[UIView transitionWithView:self.navigationController.view
duration:0.75
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{
[self.navigationController pushViewController:viewcontroller animated:NO];
}
completion:nil];
// in viewcontroller
[UIView transitionWithView:self.navigationController.view
duration:0.75
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
[self.navigationController popToRootViewControllerAnimated:NO];
}
completion:nil];
In Swift 4:
Push:
UIView.transition(with: (self.navigationController?.view)!, duration: 0.75, options: .transitionFlipFromRight, animations: {
self.navigationController?.popViewController(animated: true)
})
Pop:
UIView.transition(with: (self.navigationController?.view)!, duration: 0.75, options: .transitionFlipFromLeft, animations: {
self.navigationController?.popViewController(animated: true)
})