限制FlipsideViewController方向

时间:2012-08-18 22:21:41

标签: ios xcode ios5 xcode4.4

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

1 个答案:

答案 0 :(得分:1)

首先,获取当前方向:

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

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

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

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

设备:

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

模拟器:

[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. 进入第二视图。