iOS – 使用动画更改根视图控制器

我正在通过按下一个连接到我想要更改为的视图控制器的自定义segue的按钮来更改根视图控制器.自定义segue看起来像:
- (void)perform{
    UIViewController *source = (UIViewController *)self.sourceViewController;
    source.view.window.rootViewController = self.destinationViewController;
}

但这只会立即更改根视图控制器.我希望控制器在旧控制器之上淡出.

解决方法

常见的方法是:
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

您实例化的新视图控制器将以认方向显示,即纵向.因此,如果您在横向中执行此操作,则新视图控制器将显示为纵向,然后转为横向.这条线为我解决了这个问题.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...