我正在开发一个应用程序(我的第一个),它基本上是一个TabBar应用程序。 更确切地说,有: - 登录视图控制器 - 标签栏控制器(登录完成后) - 当TabBar的第一个itel从纵向切换到横向时使用的横向视图控制器。
因此,当我在第一个标签中时,我需要能够移动到横向视图以显示其他一些数据。在我的标签栏控制器中,我实现了这些方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if([self selectedIndex] == 0)
return YES;
return NO;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
// Get AppDelegate
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
// Remove TabBarView and add graph Landscape View
[self.view removeFromSuperview];
[delegate setSubViewLandscapeViewController];
}
}
在委托中,我实现了setSubViewLandscapeViewController和setSubViewTabBarController:
- (void)setSubViewTabBarViewController {
[window addSubview:[tabBarController view]];
}
- (void)setSubViewGraphLandscapeViewController {
[window addSubview:[landscapeViewController view]];
}
我希望landscapeViewController仅以横向模式显示,然后我(在我的landscapeViewController中):
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
NSLog(@"willRotateToInterfaceOrientation");
}
这部分工作正常,我的意思是从纵向切换到横向是正常的(当我在第一个选项卡中时),tabbarcontroller从SuperView中删除,横向视图被添加为子视图。
事情是......我不知道如何切换回纵向模式(然后使用我的委托的setSubViewTabBarViewController加载前一个控制器,tabBar一个)。当我实际从横向视图中移动设备时,似乎没有任何willRotateToOrientation,willRotateFromOrientation,...被触发...
简而言之,当我在风景视图中时,我不知道该怎么做才能回到标签栏视图......一旦我进入这个视图,我就会陷入景观视野中。
非常感谢你的帮助,
吕克
答案 0 :(得分:0)
在示例文件夹中查看CPTestApp-iPhone中的饼图。它通过实现-(void)didRotateFromInterfaceOrientation:
并在旋转后调整图形大小来处理旋转。
答案 1 :(得分:0)
好吧,我设法找到了解决这个问题的方法。 实际上,在从纵向移动到横向移动时,我从窗口子视图中删除了tabbarcontroller并添加了landscapeviewcontroller。 看起来这不是正确的事情。 相反,我将landscapeViewController添加为tabbarcontroller的子视图,并在从横向到纵向时将其删除。 我仍然有一个问题,但横向视图的y位置似乎在我连续几次决定旋转时发生变化.... 问候, LUC