我正在基于xcode Utility App模板创建一个简单的实用程序应用程序。我想将FlipsideViewController方向限制为仅在调用FlipsideViewController时设备所处的方向。最简单的方法是什么?我尝试过几种不同的方式但到目前为止所有这些都失败了。感谢...
答案 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;
否则,我认为问题出在模拟器上。如果您在模拟器上加载应用程序时尝试对第一个视图进行测试,则会出现这些问题。我测试了后续视图,如果您执行以下操作,它们可以正常工作: