Obj-C
respuestas Obj-C
o MonoTouch C#
están bien.
El RootViewController de UIWindow inicial es una pantalla de inicio de session simple.
window.RootViewController = loginScreen;
Después de iniciar session, configuré la raíz en la aplicación principal
window.RootViewController = theAppScreen;
¿Cómo puedo Fade-transition entre los dos RootViewControllers en esta instancia?
Podría sugerirle un enfoque diferente que le proporcione su animation. Simplemente vaya al controller de la aplicación de theAppScreen
primero , y si necesita que el usuario inicie session, haga que el presentViewController
llegue a la loginScreen
(no necesita animar este paso si quiere que parezca que fue directamente al inicio de session pantalla). De esta forma, cuando hayas iniciado session correctamente, loginScreen puede dismissViewControllerAnimated
y tu animation volverá a la theAppScreen
principal theAppScreen
. (Obviamente, si desea el efecto de desvanecimiento, no olvide configurar el modalTransitionStyle
del controller en UIModalTransitionStyleCrossDissolve
).
Si está rootViewController
decidido a cambiar su rootViewController
, la única forma en que puedo pensar en hacerlo (y no me gusta) sería hacer algo como:
MainAppViewController *controller = [[MainAppViewController alloc] initWithNibName:@"MainAppViewController" bundle:nil]; // animate the modal presentation controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self.window.rootViewController presentViewController:controller animated:YES completion:^{ // and then get rid of it as a modal [controller dismissViewControllerAnimated:NO completion:nil]; // and set it as your rootview controller self.window.rootViewController = controller; }];
La primera técnica me parece mucho más limpia.
Este es el código MT de la técnica de @Robert Ryan (aunque estoy de acuerdo con su sugerencia de que la aplicación theAppScreen
is probablemente el "correcto" RootViewController
):
void DissolveIn (UIWindow window, UIViewController newController) { newController.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve; window.RootViewController.PresentViewController (newController, true, () => { window.RootViewController.DismissViewController (false, null); window.RootViewController = newController; }); }
Puedes hacerlo:
window.RootViewController = theAppScreen; loginScreen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [theAppScreen presentModalViewController:loginScreen animated:NO];
loginScreen puede descartarse cuando [self dismissModalViewControllerAnimated:YES];
El NO en la primera animation hará que la pantalla de inicio de session aparezca sin ninguna visibilidad de la pantalla de la aplicación debajo de ella. El animado = SÍ al finalizar proporcionará la disolución cruzada.