【问题标题】:App doesn't rotate on iPhone Simulator应用程序不会在 iPhone 模拟器上旋转
【发布时间】:2012-09-24 10:53:56
【问题描述】:

我想用 iPhone 5 的分辨率测试我的应用程序,所以我正在使用模拟器。我的应用在支持的设备方向中有纵向和 2 个横向方向,并且允许旋转的视图控制器将 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 继续正常旋转。

【问题讨论】:

  • 它在 iPhone 4 模拟器上旋转吗?
  • 没有。它在我拥有的实际 iPhone 4 上旋转。
  • 哇,有趣...让我试试这个!我现在真的很好奇......:D
  • 很好的问题。 +1!尽管如此,我刚刚在 Xcode 中创建了一个新项目并在 iPhone 模拟器(4 和 5)中运行了代码,并且旋转工作正常。没有代码,调试起来可能有点棘手。
  • 你能不能试着用 [self.navigationController pushViewcontroller:self.timeline animated:NO(or YES if you want animation)] 替换 setViewControllers: 行;

标签: iphone objective-c ios xcode simulator


【解决方案1】:

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

    self.window.rootViewController = self.navigationController;

【讨论】:

  • 这行得通,但是现在如果它位于允许旋转并旋转到横向的 viewController 上,然后它返回到不允许旋转到横向的 viewController,它会在横向显示 viewController .有什么办法可以阻止这种情况发生?
【解决方案2】:

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

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

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

编辑

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多