我的情况和this question很相似.我有一个通用的应用程序,其中 iPhone 为纵向,iPad 为横向,我使用 appDelegate.window.rootViewController = newScreen 在所有主屏幕之间切换; iPhone 应用程序完美运行。 iPad应用程序有时会以纵向而不是横向将屏幕弹出。这是一些示例转换代码:
AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
ViewController* v = nil;
if (IS_IPAD()) {
v = [[ViewController alloc] initWithNibName"ViewController-iPad" bundle:nil];
}else{
v = [[ViewController alloc] initWithNibName"ViewController" bundle:nil];
}
[appDelegate.window setRootViewControllerUIViewController*)v];
我也尝试过 this other question :
AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
ViewController* v = nil;
if (IS_IPAD()) {
v = [[ViewController alloc] initWithNibName"ViewController-iPad" bundle:nil];
}else{
v = [[ViewController alloc] initWithNibName"ViewController" bundle:nil];
}
[UIView
transitionWithView:appDelegate.window
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^(void) {
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[appDelegate.window setRootViewControllerUIViewController*)v];
[UIView setAnimationsEnabledldState];
}
completion:nil];
但没有任何东西可以解决它。
还尝试使用 [appDelegate.window makeKeyAndVisable] 和 [appDelegate.window makeKeyWindow],希望这会“震撼”它做出正确的方向。
Best Answer-推荐答案 strong>
我明白了!
这是我的过渡 block 的样子。我做的关键是从 CALayer 复制变换(进行实际旋转的东西)。请注意,您必须在文件顶部包含 Quartz 框架和 #import 。
[UIView transitionWithView:self.window
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
target.view.layer.transform = window.rootViewController.view.layer.transform;
window.rootViewController = target;
[UIView setAnimationsEnabledldState];
} completion:nil];
关于ios - rootViewController 设置但出现方向不正确,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/11217123/
|