我已经创建了一个UITabBarController的子类来处理我切换时的视图autoRotation,因为我需要一些视图是肖像和其他视图。
如果我旋转设备,这一切都按预期工作,因此景观设计将旋转到横向并保持这种状态。我遇到的问题是视图显示时不会自动执行旋转。因此,在将设备旋转为横向之前,将视为横向的视图显示为纵向,此时它们将其锁定为横向模式。
我想知道是否有人可以告诉我如何在视图更改时强制旋转,所以当我切换到横向视图时,它会立即旋转到该方向?
很抱歉,如果之前已经问了一百万次,但我似乎无法找到线程。
编辑,我发现了以下代码:
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];
这确实执行了旋转,但是我不知道在哪里调用它,因为标签栏控制器没有调用诸如init / viewDidLoad之类的东西,显然将它放在viewDidAppear等会导致无限循环。
对此有任何帮助吗?
答案 0 :(得分:3)
我想出了一个解决我问题的方法,并将其发布在这里,只是因为其他人想要它。我警告你,现在这是一个解决方法,但我找不到答案,所以这是我能做的最好的。
首先将UITabBarControllerDelegate添加到正在创建TabBarController的协议中,我正在使用AppDelegate,请执行以下操作:
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
这允许访问以下TabBar协议:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
每当按下一个TabBarItems(沿着底部的按钮)时,基本上会调用它。在这个函数中,我提取了viewControllerNibFile的名称,因为这是它们的名称(如果你不想担心命名约定,你可以使用view.tag),并将事件发送到通知中心,如下所示: :
NSString *notificationName;
if ([viewController.nibName isEqualToString:@"IntroViewController"])
notificationName = [NSString stringWithString:@"IntroViewChange"];
NSLog(@"%@", notificationName);
[[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:nil];
然后我在类中设置了一个调用以下事件的监听器:
- (void)updateViewRotation
{
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];
}
如前所述,这是一个大规模的工作,它看起来相当沉重和丑陋,但它做我需要的。如果有人想提供更高效的代码,我很乐意接受它。
答案 1 :(得分:2)
if ( [viewController respondsToSelector:@selector(updateViewRotation)] ) {
[viewController performSelector:@selector(updateViewRotation)];
}
仅当需要特别注意的viewController是选项卡上的第一个时才有效。
此外,更新iOS 6弃用:
- (void)updateViewRotation
{
UIViewController *vc = [[UIViewController alloc] init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
}