6

我正在使用 splitviewcontroller 作为我的应用程序的根视图。我需要将登录和注册视图显示为 splitviewcontroller 顶部的模式视图。当我尝试从 splitViewController 的 rootview 的 viewdidAppear 方法呈现登录/注册视图时,它没有显示出来。我尝试使用以下代码从 Appdelegate 的 didFinishLaunching 方法呈现登录/注册视图

[self.window.rootViewController presentModalViewController:self.navController animated:NO]; 

它有效。

我的问题是,该应用程序同时支持横向方向,但是当我在设备中运行它时,无论我持有设备的哪个方向,我都只得到 LandscapeRight 作为方向。因此,如果我将设备置于 LandscapeLeft 方向,则应用程序会在登录屏幕上下颠倒的情况下启动。我在 info.plist 上以支持的方向使用 LandscapeLeft & Right。

请帮我解决问题。另外,当我们将 splitViewcontroller 作为应用程序的根视图时,我们将如何呈现视图?

在 iOS 5.0(仅限)中,我能够从 splitviewcontroller 的 rootview 控制器 - viewdidAppear 方法呈现登录视图。在所有其他操作系统版本中,这种情况都不起作用,我需要从 Appdelegate 的 didFinishLaunching 方法中呈现它。

4

2 回答 2

0

如果我没记错的话,iOS 会误报实际方向,直到第一次旋转

也 IIRC,使用[[UIApplication sharedApplication] statusBarOrientation]规避了这个问题。

于 2012-01-16T17:40:26.187 回答
-1

从窗口中删除登录视图后,使用以下代码根据设备的方向设置 rootviewcontroller 方向。

#define DegreesToRadians(x) ((x) * M_PI / 180.0)

[LoginviewContoller.view removeFromSuperview]

self.viewController = [[[ExampleViewController alloc] initWithNibName:@"ExampleViewController" bundle:nil] autorelease]; 

switch(self.viewController.interfaceOrientation)

{ 
case UIInterfaceOrientationPortrait:             
    NSLog(@"potrait");            
    break;
case UIInterfaceOrientationPortraitUpsideDown:
    NSLog(@"prtraitdown");
    break;
case UIInterfaceOrientationLandscapeLeft:
    self.viewController.view.transform =  
    CGAffineTransformMakeRotation(DegreesToRadians(270));
    NSLog(@"lanscapelef");
    break;
case UIInterfaceOrientationLandscapeRight:
   self.viewController.view.transform = CGAffineTransformMakeRotation(DegreesToRadians(90));
   NSLog(@"landcsape righ");
   break;
}

[self.window addSubview:self.viewController.view];

它将根据设备方向加载 Rootviewcontroller。

于 2012-05-16T14:26:27.973 回答