我想用iPhone 5分辨率测试我的应用程序,所以我正在使用模拟器。我的应用程序在支持的设备方向中具有纵向和2个横向方向,并且允许旋转的viewControllers将shouldAutorotateToInterfaceOrientation
设置为YES。然而,当我在模拟器中旋转设备时,它不会像在设备上那样旋转。现在我只是使用标准的iPhone 4模拟器。
编辑:这是我设置VC的代码。
UIViewController *vc = [[UIViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
[self.window addSubview:self.navigationController.view];
self.loadingWood = [[UIImageView alloc] init];
[vc.view addSubview:self.loadingWood];
然后不久:
self.timeline = [[JTimelineViewController alloc] init];
[self.navigationController setViewControllers:[NSArray arrayWithObject:self.timeline]];
这是应用启动时视觉效果所必需的。
编辑2:
我现在有这个工作。我现在面临的问题是,尽管我的一个viewControllers说明了这一点,它仍然会在iPhone模拟器上的任何旋转时旋转:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
编辑3:我的手机正在运行iOS5。模拟器正在运行iOS6。这是一个可能的原因。删除横向左侧和横向右侧支持方向意味着根本没有模拟器旋转,但我的iOS5 iPhone 4继续正常旋转。
答案 0 :(得分:1)
确保您正在设置根视图控制器,如:
self.window.rootViewController = self.navigationController;
答案 1 :(得分:1)
过去我不得不处理类似的事情。结果是只有应用程序的主视图控制器接收轮换通知和委托调用。有一些例外,比如UINavigationController,将这些事件传递给它们当前的视图控制器。
因此,例如,如果您的AppDelegate类加载视图控制器并且该视图控制器推送第二个视图控制器,则该第二个视图控制器将不会收到旋转通知。
我建议您使用UINavigationController将UIViewControllers推送到显示器上,因为UINavigationController会传递旋转委托调用和通知。
修改的
在Xcode的首选项中,在“下载”选项卡下,您可以选择下载以前的模拟器,iOS 5和iOS 5.1。下载这些并将目标iOS版本设置为5.0(或5.1),然后从设备列表中选择正确的模拟器。看看你是否遇到了与iOS 6模拟器相同的问题。如果你这样做,那么iOS 5和iOS 6处理UINavs的方式肯定存在差异。
此外,使用setViewControllers
和pushViewController
之间的差异是pushViewController
将视图控制器添加为父视图控制器的子级,这使得它响应委托调用,包括回转。从iOS 5开始,每个UIViewController现在都有一个名为addChildViewController
的方法,可以为UIViewController
类提供该功能。