在iPad上的IOS 6中,初始旋转始终是纵向,之后它始终正确旋转

时间:2012-11-06 15:07:05

标签: ipad rotation ios6

在iOS 5.X下正常运行且支持所有方向的发货应用程序,针对iOS 6构建,即使在ipad /模拟器处于风景中,它也始终以纵向方式启动。

我确实添加了新的旋转方法

- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);

但这没什么区别。

注意我们使用导航控制器作为根视图控制器。否则,应用程序会在初始问题后正确旋转。

根视图控制器处理旋转的所有决策,并作为

添加到主窗口
    self.window.rootViewController = viewController;

我在plist键集中有所有旋转UISupportedInterfaceOrientations~ipad

忽略初始轮换的任何想法?

在5.1下,它调用了shouldAutorotateToInterfaceOrientation和willRotateToInterfaceOrientation等正确但不低于6.0。如果我构建5.1 SDK,那么一切都很好。

2 个答案:

答案 0 :(得分:2)

在与Apple交谈后,他们声称这是现有项目中Xcode 4.5中的一个错误。您可以创建一个新项目并重新添加所有内容(很难与像我们这样的大项目)。或者像这样添加旋转逻辑:

- (void)viewWillLayoutSubviews
{
    if ( ! afterFirstTime )
    {
        [self handleRotationFor:self.interfaceOrientation];
        afterFirstTime = YES;
    }
}

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self handleRotationFor:toInterfaceOrientation];
}

在根视图控制器上。我在感恩节休息之前得到了这个答案所以它可能有点粗略,但这段代码确实有效。

答案 1 :(得分:1)

如果您的应用程序支持纵向视图,正如MusiGenesis所说; “iOS应用程序总是以纵向(即使设备是风景)开始。”

但是我找到了一个以设备为导向的解决方案。 您可以在viewDidLoad函数之后在根ViewController中设置初始旋转,如下所示。

代码似乎没有意义但是有效。

无需处理纵向旋转。

- (void)viewDidLoad {

[super viewDidLoad];
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) {
    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationLandscapeLeft];

}
else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) {
    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationLandscapeRight];

}

}

问候。