10

Obj-C或者MonoTouch C#答案很好。

初始 UIWindow 的 RootViewController 是一个简单的登录屏幕。

window.RootViewController = loginScreen;

登录后,我将 Root 设置为主应用程序

window.RootViewController = theAppScreen;

在这种情况下,如何在两个 RootViewController 之间进行淡入淡出转换?

4

3 回答 3

19

我可能会建议一种不同的方法来为您制作动画。只需先转到theAppScreen控制器,如果您需要用户登录,请让它执行(如果您希望它看起来像直接进入登录屏幕,则不必为此步骤设置动画)。这样,当您成功登录后, loginScreen 就可以将动画返回到 main 。(显然,如果你想要淡入淡出效果,不要忘记将控制器设置为。)presentViewControllerloginScreendismissViewControllerAnimatedtheAppScreenmodalTransitionStyleUIModalTransitionStyleCrossDissolve

如果你一心想要改变你的rootViewController,我能想到的唯一方法(我不喜欢它)就是做这样的事情:

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;
}];

第一种技术对我来说似乎更干净。

于 2012-07-28T01:23:18.687 回答
3

这是@Robert Ryan 技术的 MT 代码(尽管我同意他的建议,这theAppScreen可能是“正确的” RootViewController):

void DissolveIn (UIWindow window, UIViewController newController)
{
  newController.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
  window.RootViewController.PresentViewController (newController, true, () => 
  {
    window.RootViewController.DismissViewController (false, null);
    window.RootViewController = newController;
  });
}
于 2012-07-28T02:02:46.873 回答
1

你可以这样做:

window.RootViewController = theAppScreen;

loginScreen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[theAppScreen presentModalViewController:loginScreen animated:NO];

loginScreen 可以在完成后自行关闭:[self dismissModalViewControllerAnimated:YES];

第一个动画上的 NO 将使 loginScreen 出现,而​​其下方的 theAppScreen 没有任何可见性。完成时的动画 = YES 将提供交叉溶解。

于 2012-07-28T01:31:34.453 回答