iOS - 使用动画更改 Root View Controller

标签 ios objective-c segue

我正在通过按下一个按钮来更改 Root View Controller ,该按钮连接到我想要更改到的 View Controller 的自定义 segue。自定义转场看起来像:

- (void)perform{
    UIViewController *source = (UIViewController *)self.sourceViewController;
    source.view.window.rootViewController = self.destinationViewController;
}

但这只是立即改变了 Root View Controller 。我希望 Controller 在旧 Controller 之上淡出。

最佳答案

常见的做法是:

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"YourSBName" bundle:nil];
    UIViewController *vc = [sb instantiateInitialViewController];// Or any VC with Id
    DictateITAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    appDelegate.window.rootViewController = vc; // PLEASE READ NOTE ABOUT THIS LINE
    [UIView transitionWithView:appDelegate.window
                      duration:INTERVAL_DURATION
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{ appDelegate.window.rootViewController = vc; }
                    completion:nil];

现在有几点说明:

appDelegate.window.rootViewController = vc; // PLEASE READ NOTE ABOUT THIS LINE

您实例化的新 View Controller 将以默认方向显示,即纵向。因此,如果您在横向模式下这样做,您的新 View Controller 可能会显示为纵向,然后变为横向。这一行为我解决了这个问题。

关于iOS - 使用动画更改 Root View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23357742/

相关文章:

objective-c - iOS 7 自动布局 - 忽略通话状态栏

ios - 来自单个 UIButton 的多个 Segue,该 UIButton 由于 ImageView 而发生变化

ios - 停用 segue 中的推送动画

iOS Swift 3 最初在创建时选择 tableView 中的多行

ios - 发布 XMPP 框架 (iOS) 和 EJabberd 服务器

ios - 理解如何在 Swift 中初始化 Object-c 对象的问题

objective-c - 在 AFHTTPRequestOperation Manager 和 AFHTTPSessionManager 之间进行选择时的建议

ios - 当数据以 JSON 形式出现时,保存数据并将其从 TableView Controller 发送到详细 View Controller 的正确方法是什么

ios - 如何在Xcode中正确设置UIButton的约束(如图)?

iphone - iOS 6 应用程序运行在 iOS 7 风格遵守