0

我有:

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

}

在我所有的视图控制器中,在应用程序摘要中,所有旋转都被选中,在 info.plist 中,所有旋转都被添加到支持的键中。我什至有:

autoresizesSubviews = YES;

添加到所有视图控制器以防万一,因为我没有使用笔尖。

现在这就是奇怪的地方。在 iPad 上,如果在我打开应用程序之前设备处于横向状态,则打开应用程序并加载它旋转到横向的子视图,直到我强制关闭应用程序并重新启动它。我试过删除应用程序并重建,我已经在几个物理设备上尝试过,但仍然没有改变。我什至在 shouldAutoRotate 方法中添加了一个 NSLog 调用,但它永远不会被调用。我什至尝试使用虚拟导航控制器对 UINavigationController 进行子类化,并将 shouldAutoRotate 方法添加到虚拟类中。

最后,如果我将其设置为横向,则只有状态栏处于横向位置,但视图的其余部分将处于标准纵向。

关于从哪里开始诊断的任何想法?

4

2 回答 2

1

你有没有设置self.window.rootViewController在你AppDelegatedidFinishLaunchingWithOptions?我注意到在 iOS 5 及更低版本中,即使您没有设置 ,应用程序也可以正确旋转rootViewController,但您必须在 iOS 6 中设置它。

还可能值得注意的是,iOS 6 中的自动旋转发生了变化(略微?)。shouldAutorotateToInterfaceOrientation现在有两种方法(shouldAutorotatesupportedInterfaceOrientations)用于自动旋转行为,而不是只有一种方法( )。

于 2012-12-01T03:27:59.353 回答
0

自动旋转在新版本的 iOS 中非常烦人,如果你想做与苹果的基本 ViewControllers 有点不同的事情,那会很痛苦,所以我建议你使用:

- (void)viewDidAppear:(BOOL)animated {

UIDevice *device = [UIDevice currentDevice];                    //Get the device object
[device beginGeneratingDeviceOrientationNotifications];         //Tell it to start monitoring the accelerometer for orientation
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];    //Get the notification centre for the app
[nc addObserver:self                                            //Add yourself as an observer
       selector:@selector(orientationChanged:)
           name:UIDeviceOrientationDidChangeNotification
         object:device];



}

- (void)viewWillDisappear:(BOOL)animated {

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

并自己制作动画,相信我,与尝试使用苹果默认方法设置标志和一切正确相比,您将节省大量时间

- (void)orientationChanged:(UINotifiacion*)notification {

UIDevice *device = (UIDevice *)[notification object];
if (UIInterfaceOrientationIsLandscape([device orientation])) {
  [UIView animateWithDuration:0.4 animations:^{
    self.view.transform = CATransform3DMakeRotation(M_2_PI, 0, 0, 1);
      }];

   }

}
于 2012-12-01T02:38:38.603 回答