The Human Bagel
The Human Bagel

Reputation: 7224

UIView transitionWithView custom animation option

I have an application that first displays a login screen. Once the user logs in, this code is executed:

[UIView transitionWithView:self.view.window
                              duration:0.7
                               options:UIViewAnimationOptionTransitionNone
                            animations:^{
                                self.view.window.rootViewController = menuController;
                            } completion:^(BOOL finished) {
                                // Code to run after animation

                            }];

This works as expected; however, I would like to define my own custom animation option instead of the flip from left/right option.

A simple example would be sliding the new view controller onto the screen from top to bottom. How can I do this when changing the rootViewController?

Also, is there a completely different approach to animate switching the rootViewController? I am not married to this solution, it is just the closest thing I can find through Google/SO search.

Any help would be great, thanks!

Upvotes: 2

Views: 2072

Answers (2)

Lyndsey Scott
Lyndsey Scott

Reputation: 37290

Using a CATransition should be able to give you the sort of animation you're looking for. Granted, I've never actually attempted this specifically with rootViewController, but to slide the view in from top to bottom, I'd suggest trying this:

CATransition *transition = [CATransition animation];
transition.duration = 1.0;
transition.type = kCATransitionFromBottom;
transition.subtype = kCATransitionFade;

CALayer *layer = self.view.window.rootViewController.view.layer;
[layer addAnimation:transition forKey:kCATransition];

Upvotes: 3

Marcos Griselli
Marcos Griselli

Reputation: 1346

For that change to happen you must first add the ViewController and its view to the parent viewController. A simple trick could be add it "on the roof" of your window (starting Y position = -self.view.bounds.size.height). And then use

[UIView animateWithDuration:
                      delay:
                    options:
                 animations:^{}
                 completion:^(BOOL finished){
                     self.view.window.rootViewController = menuController;
                 }];

Then simply inside the animation brackets create the animation you want.

Upvotes: 0

Related Questions