1

我很难让我的应用程序正确支持所有的方向。 问题在于启动。我已经做了以下步骤:iPad初始定位

  1. 补充:

    <key>UISupportedInterfaceOrientations</key> 
    <array> 
        <string>UIInterfaceOrientationPortraitUpsideDown</string> 
        <string>UIInterfaceOrientationLandscapeLeft</string> 
        <string>UIInterfaceOrientationLandscapeRight</string> 
        <string>UIInterfaceOrientationPortrait</string> 
    </array> 
    
  2. 确信,我的所有视图控制器始终shouldAutorotateToInterfaceOrientation返回YES
  3. 添加所有默认*图像

在风景中 - 应用程序开始显示正确的默认图像,但实际应用程序以纵向开始。不会调用willRotate ...和shouldAutorotate ..方法。

我甚至试过(从WordPress的)的混写方法:

+ (void)youWillAutorotateOrYouWillDieMrBond { 
    NSLog(@"youWillAutorotateOrYouWillDieMrBond"); 
    Swizzle([NSClassFromString(@"UISplitViewController") class], @selector(shouldAutorotateToInterfaceOrientation:), @selector(MyShouldAutorotateToInterfaceOrientation:), NULL); 
    Swizzle([NSClassFromString(@"UIViewController") class], @selector(shouldAutorotateToInterfaceOrientation:), @selector(MyShouldAutorotateToInterfaceOrientation:), NULL); 
} 

- (BOOL)MyShouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    NSLog(@"MyShouldAutorotateToInterfaceOrientation (%@)", self); 
    return(YES); 
} 
没有运气

也。无论我做什么 - 如果设备处于横向模式,该应用程序将以肖像开始。

我已阅读相应的Apple文档 - 他们说应用程序总是以纵向开始,但如果VC支持方向,则会自行旋转。所以,我似乎正在尽我所能...

真的出于这里的想法,将不胜感激任何见解。

+0

它应该工作(并且它适用于我的项目)。启动时的视图层次结构究竟是什么样的? – Anomie 2011-05-08 12:31:08

+0

这是一个由iPad模板构建的标准应用程序,我有一个分割视图控制器,所以在启动时显示vc细节,并在工具栏上打开主vc。 – reflog 2011-05-08 12:51:07

回答

4

好的,感谢所有帮助过的人,但它不是建议的解决方案之一: 似乎我偶然发现了一些iPAD的bug。

解决办法很简单:

母版视图没有收到任何事件,出于某种原因,这是问题所在。我所做的是将UIViewController包装在UINavigationController中并将其设置为Master。然后导航控制器DID接收事件并将其传递。问题解决了!

+0

仍然有这个问题,只有这个答案解决了它。这是一个愚蠢的问题! – marzapower 2013-03-26 11:00:26

0

这可能是您的笔尖安装在错误模式下的问题。您可以将笔尖的开始位置更改为横向或肖像。我发现这比使用视图控制器更容易。

要做到这一点去界面生成器,选择视图。在“查看属性”窗口中选择最左边的选项卡,然后将方向更改为横向。

+0

NIB中的定位(据我所知)仅用于设计目的。无论如何 - 设置它并没有帮助,而且我还想继续支持Portrait。这对我来说不是一个正确的解决方案。 – reflog 2011-05-05 20:50:00

0

首先,检查你有四个UISupportedInterfaceOrientations到您的info.plist

其次,检查您要添加的拆分视图的应用程序窗口(如:[self.window addSubview:splitViewController.view];)在应用程序委托的applicationDidFinishLaunchingWithOptions,并且不晚,这可能会导致此问题。

或者,UIWindow只能可靠地将旋转传递给添加到窗口的第一个视图的视图控制器。取决于你如何做你的分割视图控制器,这可能是问题。确保您需要正确旋转的任何视图都位于子视图层次结构中,无论视图添加到窗口的第一个视图是什么,以便视图控制器可以正确地向下传递旋转事件。

希望有帮助!

+0

正如问题所述 - 所有方向都在plist文件中提供。关于添加拆分视图 - 它是从MainWindow.xib启动的,所以它在DidFinish之前启动。 – reflog 2011-05-09 04:07:48

0

如果您无法解决问题,请尝试将其添加到Info.plist文件中。这对我的作品在我的普及应用:

<key>UISupportedInterfaceOrientations~ipad</key> 
<array> 
    <string>UIInterfaceOrientationPortrait</string> 
    <string>UIInterfaceOrientationPortraitUpsideDown</string> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
</array> 

的此不同的是,你强迫这些属性是iPad专用通过~ipad片段。

如果你想强加于推出的应用程序的方向,你应该尝试更新applicationDidFinishLaunching:方法添加这个,给力方向的变化通知:

UIDevice *device = [UIDevice currentDevice]; 
[device beginGeneratingDeviceOrientationNotifications]; 

希望这有助于。

如果这不起作用,它可能是与您的应用程序的初始化有关的问题,即您创建UISplitViewController的方式,并将边和细节控制器添加到它。在这种情况下,请过去那段代码。

+0

感谢您的建议,我尝试了〜ipad版本,不幸的是 - 没有骰子,没有帮助。此外,我的应用程序是从MainWindow.xib构建的,因此分割视图未从代码 – reflog 2011-05-10 09:55:26

+0

初始化。如果您将设备横向放置,它将从纵向开始并永远不会旋转? – marzapower 2011-05-10 10:01:00

+0

它以纵向开始,但如果我移动设备将会旋转。主要问题是showAutoRotate没有在应用程序启动时调用(因为我认为它应该),它只是在我物理移动设备时才调用。 – reflog 2011-05-10 10:09:53