1

我想用 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:

我现在有这个工作。我现在面临的问题是,尽管我的一个视图控制器说明了这一点,但它仍然会在 iPhone 模拟器上进行任何旋转时旋转:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

编辑 3:我的手机正在运行 iOS5。模拟器运行iOS6。这是一个可能的原因。删除横向左和横向右作为支持的方向意味着根本没有模拟器旋转,但我的 iOS5 iPhone 4 继续正常旋转。

4

2 回答 2

1

我过去不得不处理类似的事情。发生的事情是只有应用程序的主视图控制器接收旋转通知和委托调用。有一些例外,比如 UINavigationController,会将这些事件传递给它们当前的视图控制器。

因此,例如,如果您的 AppDelegate 类加载了一个视图控制器并且该视图控制器推送了第二个视图控制器,则该第二个视图控制器将不会收到旋转通知。

我建议您使用 UINavigationController 将 UIViewControllers 推送到显示器上,因为 UINavigationController 会传递旋转委托调用和通知。

编辑

在 Xcode 的首选项中,在下载选项卡下,您可以选择下载以前的模拟器,iOS 5 和 iOS 5.1。下载这些并将您的目标 iOS 版本设置为 5.0(或 5.1),然后从设备列表中选择正确的模拟器。看看您是否遇到与 iOS 6 模拟器相同的问题。如果你明白了,那么 iOS 5 和 iOS 6 处理 UINav 的方式肯定是不同的。

setViewControllers此外,使用和之间的区别在于pushViewControllerpushViewController视图控制器添加为父视图控制器的子视图,这使其响应委托调用,包括旋转。从 iOS 5 开始,每个 UIViewController 现在都有一个方法,该方法addChildViewController为类提供该功能UIViewController

于 2012-10-03T13:48:49.967 回答
1

确保您正在设置根视图控制器,如下所示:

    self.window.rootViewController = self.navigationController;
于 2012-10-03T13:44:13.060 回答