Obj-C
or MonoTouch C#
answers are fine.
The initial UIWindow's RootViewController is a simple login screen.
window.RootViewController = loginScreen;
After login, I set the Root to the main app
window.RootViewController = theAppScreen;
How do I Fade-transition between the two RootViewControllers in this instance?
You can do this:
loginScreen can dismiss itself when done:
[self dismissModalViewControllerAnimated:YES];
The NO on the first animation will make the loginScreen appear without any visibility of the theAppScreen beneath it. The animated = YES on completion will provide the cross-dissolve.
This is MT code of @Robert Ryan's technique (although I agree with his suggestion that
theAppScreen
is probably the "correct"RootViewController
):I might suggest a different approach that will get you your animation. Just go to the
theAppScreen
controller first, and if you need the user to log in, have it do thepresentViewController
to get to theloginScreen
(you don't have to animate this step if you want it look like it went directly to the login screen). That way, when you've successfully logged in, the loginScreen can justdismissViewControllerAnimated
and you've got your animation back to the maintheAppScreen
. (Obviously, if you want the fade effect, don't forget to set the controller'smodalTransitionStyle
toUIModalTransitionStyleCrossDissolve
.)If you're dead set on changing your
rootViewController
, the only way I can think of doing it (and I don't like it) would be to do something like:The first technique seems much cleaner to me.