2011-08-07 43 views
1

我使用“基于窗口的应用程序”模板创建了一个非常基本的iPad应用程序。不幸的是,当我旋转模拟器时,提供的视图不会旋转。此外,当我添加视图控制器和/或UINavigationController到基本窗口时,它们也不会旋转。我实施了基本窗口程序的屏幕旋转不起作用

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

在视图控制器中,我添加了...但仍然看不到任何旋转。

我错过了什么吗?

+0

您是否记得在目标中设置所有旋转都被支持? – msgambel

+0

您的设备是否旋转锁定? – Raptor

+2

你的意思是你实现了'shouldAutorotateToInterfaceOrientation:'到你的视图控制器,而不是你的视图,对吧? – cduhn

回答

1

要编排自动旋转,应用程序的窗口会查找由视图控制器管理的最顶层子视图。窗口在该视图控制器上调用shouldAutorotateToInterfaceOrientation:,并按照指示转换视图控制器的视图。

这就是为什么基于窗口的应用程序不能自动旋转开箱即用的原因。默认的模板不带有已经为您设置的视图控制器。要利用自动旋转,您必须创建一个自定义UIViewController子类,根据需要编辑它的shouldAutorotateToInterfaceOrientation:方法,并将该视图控制器的视图添加为窗口的直接子视图(或将视图控制器添加到容器中,例如UINavigationController,并添加容器视图控制器的视图作为窗口的子视图)。这通常在application:didFinishLaunchingWithOptions:中完成。

您声明“当我添加视图控制器和/或UINavigationController到基本窗口时,它们也不会旋转”,并且您已实现shouldAutorotateToInterfaceOrientation:,并且它仍然不会旋转。如果你已经正确配置了一切,这应该工作。你可能在这个过程中犯了一些小错误,但我不能确定没有看到你的项目是什么。这里有一些事情要检查:

  1. 如果你已经在NIB定义您的自定义视图控制器,请务必记得要改变身份督察IB类名称。

  2. 确保您将视图控制器的视图直接添加到窗口,并且没有其他视图充当窗口和视图控制器视图之间的包装。

  3. 确保你没有试图在IB中添加任何子视图到你的窗口对象。您应该在application:didFinishLaunchingWithOptions:中添加其子视图。

  4. 如果您在NIB中定义了自定义视图控制器,请确保其视图嵌套在IB中的视图控制器下。即不要尝试将一些其他视图连接到视图控制器的插座。

那些是在黑暗中的一些镜头。希望这个答案中的内容能帮助你找到你的错误。如果没有,请尝试创建一个基于视图的应用程序,并将其默认配置与基于窗口的应用程序进行比较。也许那么你的错误会跳出你的身上。

+0

感谢您的建议......不幸的是,它不适合我。 (1)为iPad创建基于窗口的应用程序(2)创建非常简单的类,只使用一种方法扩展UIViewController,shouldAutorotateToInterfaceOrientation:(3)用两行更新didFinishLaunchingWithOptions:RotateMe * rotateMe = [[RotateMe新] autorelease];和[self.window addSubview:rotateMe.view];新视图显示...但仍不会旋转。我会看看基于'View'的项目。 –

+0

我认为你正在为RotateMe.xib中的RotateMe构建视图层次结构,对吧? – cduhn

+0

等等......看起来你正在声明'rotateMe'作为局部变量。在超出范围之后它会自动释放。该视图保留为窗口的子视图,但控制器在您尝试旋转时释放。您应该保留rotateMe作为您的应用程序委托的属性。 – cduhn