我感到困惑的自转的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。
我想你想他们都以同样的方式回应的原因是因为它得到难于使用。 如果你是在横向模式在这特别的观点,即可以旋转,这将是一个奇怪的经验,当你弹出该视图 - 控制父在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
}
我的2美分...
通过UIViewControllers,当连接到的UITabBarController UINavigationController的,并提出了意见,不是静态的,而是DINAMIC。 我的意思是你必须考虑的是,用户很可能将您的视图之间切换。 如果他们中的一些旋转,有些没有,你的GUI应该是凌乱的,至少它是在苹果公司的意见。
我也碰到过同样的问题,希望这个解决方案可以帮助别人,
对于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收益确定