iOS:如何在viewWillAppear中找出当前方向?

时间:2011-10-31 17:53:30

标签: ios uiwebview orientation screen-orientation orientation-changes

我有一个UIWebView,我想根据其纵向或横向加载不同的网址。如何在viewWillAppear内找出我当前的方向?

4 个答案:

答案 0 :(得分:14)

使用UIApplication的statusBarOrientation属性。如果您使用设备方向UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown,则可能会遇到问题。

示例

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsLandscape(orientation))
{
   // Do something when in landscape
}
else
{
   // Do something when in portrait
}

答案 1 :(得分:4)

UIDeviceOrientation getCurrentOrientation() {
  UIDevice *device = [UIDevice currentDevice];
  [device beginGeneratingDeviceOrientationNotifications];
  UIDeviceOrientation currentOrientation = device.orientation;
  [device endGeneratingDeviceOrientationNotifications];

  return currentOrientation;
}

由您将UIDeviceOrientation转换为UIInterfaceOrientation

答案 2 :(得分:2)

当应用加载时,它不知道其当前方向 -

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIDeviceOrientationPortrait) {
    NSLog(@"portrait");// only works after a rotation, not on loading app
}

旋转设备后,您可以获得正确的方向,但是在加载应用时,如果不更改方向,似乎使用[[UIDevice currentDevice] orientation]并不知道当前的方向。

所以你需要做两件事 -

  1. 尝试在plist文件中设置应用程序接受的设备方向
  2. 在您的UIViewControllers中,当应用应该shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)
  3. 时,您需要覆盖rotate:方法以返回YES

答案 3 :(得分:1)

如果相关调用的顺序意味着您不能依赖interfaceOrientation viewWillAppear处的正确值,那么 - 假设父视图控制器旋转 - 最安全的事情可能是{{1 }}。如果没有你可以尝试从self.parentViewController.interfaceOrientation做出第一个假设,这可能并不总是100%的钱(例如,如果你的应用程序启动时设备平躺在桌子上)但很可能会给你一个更好的猜测,而不是总是假设肖像。