3

在 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 构建,那么一切都很好。

4

2 回答 2

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];
}

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

于 2012-11-21T14:40:43.440 回答
1

如果您的应用程序支持纵向视图,如MusiGenesis 所说;“iPad 应用程序在 iOS 5 中也总是以纵向启动(即使设备是横向的)。”

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

该代码似乎毫无意义,但它有效。

无需处理纵向旋转。

-(无效)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];

}

}

问候。

于 2012-11-07T12:26:37.557 回答