我正在尝试使用以下代码以模态方式呈现UITabBarController:
// Declare all view controllers.
TabOne *tabOne = [[TabOne alloc] initWithNibName:@"TabOne" bundle:nil];
TabTwo *tabTwo = [[TabTwo alloc] init];
TabThree *tabThree = [[TabThree alloc] init];
// Set each view controller's delegate to self.
tabOne.delegate = self;
tabTwo.delegate = self;
tabThree.delegate = self;
// Set a title for each view controller.
tabOne.title = @"One";
tabTwo.title = @"Two";
tabThree.title = @"Three";
// Create a tab bar controller.
UITabBarController *tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:tabOne,tabTwo,tabThree, nil]];
// Present the tab bar controller modally.
[self presentModalViewController:tabBarController animated:NO];
// Memory management.
[tabOne release];
[tabTwo release];
[tabThree release];
这一切都按预期工作,只是我在控制台中收到以下警告:
使用两阶段旋转动画。要使用更平滑的单阶段动画,此应用程序必须删除两阶段方法实现。 旋转多个视图控制器或视图控制器而不是窗口委托时,不支持使用两阶段旋转动画。
我已经对此做过一些研究,并检查了shouldAutorotateToInterfaceOrientation是如何实现的:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
据我所知,问题是标签栏控制器不是根视图控制器,但我将这种模态视图以某种方式呈现在深视图层次结构中。它是从另一个模态视图调用的,它本身是从应用程序委托中设置的标签栏调用的。
我知道这有点像一个老栗子,但它让我难过。有什么想法吗?
提前致谢。
答案 0 :(得分:6)
我遇到了类似的问题。
UITabBarController的方向处理有一些奇怪的行为。设置方向时,它会递归调用self.selectedViewController来决定是使用单阶段还是两阶段动画。这似乎是明智的,但问题是self.selectedViewController最初为零(特别是,如果你是第一次以模态方式显示UITabBarController),这可能会混淆控制器。根据iOS版本,nil selectedViewController将引导UITabBarController认为不支持单阶段动画。
试试这个:当您第一次加载/初始化UITabBarController时,添加行
tabBarController.selectedIndex = 0;
我收到了这个警告(包括严重的视觉问题:视图控制器正在切换方向,但状态栏没有),并且通过这种方式设置索引可以解决问题。 UITabBarController成功调用其选定的视图控制器,并检测到一阶段动画。