在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,那么一切都很好。
答案 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];
}
}
问候。