How to open several view controllers but animate transition only for the last one
Once I got a very unusual task for me. Along with finding the reasonable solution, I worried about the feasibility of it, since I couldn’t resolve this with a cut and dried scenario. So what exactly did I have to do?
Imagine we have three view controllers, where the first one is the main. The general idea is to display the third view controller after the first at once, but when the user pushes the “back” button it should display the second controller and only then you can return to the first.
It has to be clearer on the following scheme:
The prescribed solution is that after pushing the “next” button on the first view controller, the third controller should contain action bar panel but the second shouldn’t also transition animation should work only for the third one and icing on the cake is that the second controller should be opened in fullscreen mode. To cut the story short, all manipulations with the second controller should be unnoticeable for user’s eyes.
We can devise it as follows:
@IBAction func onNext(sender: AnyObject) {
//Create second View
let secondVC = UIStoryboard(name: "Main", bundle: nil)
.instantiateViewControllerWithIdentifier("second_vc") as! SecondViewController
//Create third View
let thirdVC = UIStoryboard(name: "Main", bundle: nil)
.instantiateViewControllerWithIdentifier("third_vc") as! ThirdViewController
//Create NavigationController and set both view to this one
let navigationController = UINavigationController()
navigationController.navigationBar.barStyle = .BlackTranslucent
navigationController.setViewControllers([secondVC, thirdVC], animated: true)
presentViewController(navigationController, animated: true, completion: nil)
}
Thanks to setViewControllers([secondVC, thirdVC], animated: true)
method I can create such behavior for my controllers. It will open third view controller with animation and will add second view controller to the stack right before third one.
Eventually, my attempts reached the expected result.