在自转的iOS5 - 失败的原因最常见的原因是什么?(Autorotation in ios5--

2019-09-16 11:54发布

我感到困惑的自转的iOS中实施。
我有一个UIViewController,我告诉它里面shouldAutoRotateToInterfaceOrientation自转。 但是,这是行不通的。 所以,我读了一些有关我需要如何看待和/或是否使用的UITabBarController导航堆栈,因为这已经知道导致各种混乱的(举手)。

其实,我有中的UITabBar一样和一个UINavigationController。 我想旋转的UIView被压入堆栈三个或四个“水平”深。

为什么不自转完全由任何当前的UIViewController内shouldAutoRotateToInterfaceOrientation收益确定的?

从位于苹果的技术文档: https://developer.apple.com/library/ios/#qa/qa2010/qa1688.html为什么当你期待它一个UIViewController可能无法旋转:

在你的UITabBarController UINavigationController的或所有子视图控制器不会在一个共同的方向放置同意。

为了确保您的所有子视图控制器正确运转,必须实现代表每个选项卡或导航级每个视图控制器shouldAutorotateToInterfaceOrientation。 每个人都必须同意相同的方向对向发生旋转。 也就是说,他们都应该返回YES为同一方向的位置。

可有人总结,我们需要什么样的事实来了解与UITabBars和UINavigationControllers工作时? 哪里的人普遍陷入困境或有什么混浊的点?

如果你有中的UITabBar一样,的UITabBarController或UINavigationController的,它所有的子视图必须具有相同的自转行为。 但可以肯定,你可以有一些子视图旋转和别人不旋转,对不对?

我怀疑未能常见的原因有,因为它适用于自转不理解响应链不够好做。 如果是这样,有人可以清除此为我? 然后,我也许能找出“选择性自转”。

为了增加这一点,其他职位表明您必须继承的UITabBarController和覆盖shouldAutorotateToInterfaceOrientation。

Answer 1:

我想你想他们都以同样的方式回应的原因是因为它得到难于使用。 如果你是在横向模式在这特别的观点,即可以旋转,这将是一个奇怪的经验,当你弹出该视图 - 控制父在navigationcontroller或点击不具有横向模式的标签。

我认为这是推理在那里。

但是,你可以捕捉设备定向通知和自己处理他们,如果你想和推入一个新的观点,如果在设备上要旋转的特定视图旋转。

用这个:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotationDetected) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

然后创建一个函数rotationDetected来处理,当我们转动......像这样发生了什么:

-(void) rotationDetected {

    if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)){

    //Push on the view in landscape orientation if we aren't there already

} else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) {

    //If the landscape view is present, pop it back to the portait view  

}


Answer 2:

我的2美分...

通过UIViewControllers,当连接到的UITabBarController UINavigationController的,并提出了意见,不是静态的,而是DINAMIC。 我的意思是你必须考虑的是,用户很可能将您的视图之间切换。 如果他们中的一些旋转,有些没有,你的GUI应该是凌乱的,至少它是在苹果公司的意见。



Answer 3:

我也碰到过同样的问题,希望这个解决方案可以帮助别人,

对于iOS 5及以下

实行分类处理,其中与标签相关联 UINavigationControllers情况:

@implementation UITabBarController (AutoRotation)

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

 {
          if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) 

          {
              UIViewController *rootController = [((UINavigationController *)self.selectedViewController).viewControllers lastObject];
             return [rootController shouldAutorotateToInterfaceOrientation:interfaceOrientation];

          }
         return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];

  }

@end

现在,一旦这一类实现自动旋转完全由任何当前的UIViewController内shouldAutoRotateToInterfaceOrientation收益确定



文章来源: Autorotation in ios5--most common reasons why it fails?