2011-06-22 162 views
0

我的应用程序中有两个UIViewController。我切换它们之间的视图。一个是隐藏的另一个不是。一切都很好,除了方向问题。在这两个的UIViewController 我重写此方法UIView旋转问题

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight)|| 
     (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)); 
    //return YES; 
} 

,并设置方向为横向两个XIB文件。

在*** Delegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
{ 
    ....... 
    viewController.view.hidden=TRUE; 

    [self.window addSubview:viewController.view]; 

    [self.window addSubview:menuController.view]; 

    ..... 
} 

如果我添加viewController.view第一viewController.view是景观位置,它可以旋转到landscapeLeft或landscapeRight。但menuController.view仍然是纵向位置,视图根本无法旋转。

如果我先添加menuController.view的情况是相反的。

为什么发生这种情况?如何解决这个问题?我的应用程序快完成了。有没有简单的方法来解决这个问题,而不需要对我的代码进行大的修改。

任何建议表示赞赏。非常感谢你!

回答

0

哪个视图控制器被定义为用于Window的rootViewController?当设备旋转时,AFAIK,被操纵的视图是rootViewController.view处的视图。

你可以检查这个把NSLog放在每个视图控制器的shouldAutorotateToInterfaceOrientation。如果我是对的,你会看到只有一个调用这个函数。

定义哪个视图控制器应该是根,并以模态方式呈现另一个视图控制器,或使用导航控制器。

希望它有帮助!

+0

致:Gonzalo Larralde感谢loooot。我很了解你在说什么。在我的应用程序中没有定义rootViewController。所以我尝试了你的方式。 menuController被定义为rootViewController,viewController被添加到menuController.view作为子视图。 menuController显示为我所期望的,但viewController.view只是变为空白。或者我应该将viewController作为一个实例添加到menuController类中,而不是将两个控制器都添加到Delegate中。这样我可能需要更改很多我不想要的代码。 – Lynn

+0

它应该如何工作? menuController和viewController应该同时显示吗?在这种情况下,指定哪些视图是主视图控制器,视图控制器应始终保持可见。在这种情况下,我会在保留给主视图控制器的menuView中定义一个视图/滚动视图,然后在menuController内部定义并实例化viewController并在其中添加它的视图。 –

+0

一次只能看到一个视图。我在委托代码didFinishLaunchingWithOptions:{....... viewController.view.hidden = TRUE; [self.window setRootViewController:menuController]; \t [self.window.rootViewController.view addSubview:viewController.view]; \t \t [self.window makeKeyAndVisible];} – Lynn