0

我正在基于 xcode Utility App 模板创建一个简单的实用程序应用程序。我想将 FlipsideViewController 方向限制为仅在调用 FlipsideViewController 时设备所处的方向。最简单的方法是什么?我已经尝试过几种不同的方法,但到目前为止,它们都失败了。谢谢...

4

1 回答 1

1

首先,获取当前方向:

- (void) viewDidAppear: (BOOL) animated
{
    eLockOrient = self.interfaceOrientation;
}

然后,禁止其他任何事情:

- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
{
    if (eLockOrient == 0)
        return true;
    return (interfaceOrientation == eLockOrient);
}

ADD:我做了一些更多的测试,模拟器和设备在启动方向方面存在显着的行为差异。设备似乎运行正常,但模拟器却没有。看来,如果您将模拟器置于横向模式,则当应用程序启动时,模拟器不会记得发送应用程序消息来告诉应用程序它需要旋转。模拟器没有意识到它是在风景中。下面是来自 sim 和 device 的痕迹。

设备:

[TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate]

模拟器:

[TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.viewDidAppear] self.intfOrient=1

因此,上面的代码将在记录日志消息的情况下工作。我正在添加以下几行来改进物理设备上的解决方案。这将消除日志中的错误消息。

if (eLockOrient == 0)
    return true;

否则,我认为问题出在模拟器上。如果您在模拟器上加载应用程序时尝试针对第一个视图进行测试,您将遇到这些问题。我已经测试了后续视图,如果您执行以下操作,它们可以正常工作:

  1. 启动应用程序。
  2. 旋转模拟器。
  3. 进入第二个视图。
于 2012-08-18T22:58:49.047 回答