iOS: как определить текущую ориентацию в viewWillAppear? - PullRequest
5 голосов
/ 31 октября 2011

У меня есть UIWebView, который я хотел бы загружать по разным URL-адресам, в зависимости от его портрета или ландшафта.Как я могу понять, какая у меня текущая ориентация внутри viewWillAppear?

Ответы [ 4 ]

14 голосов
/ 31 октября 2011

Используйте свойство UIApplication statusBarOrientation. Вы можете столкнуться с проблемами, если используете ориентацию устройства, если оно UIDeviceOrientationFaceUp или UIDeviceOrientationFaceDown.

Пример

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsLandscape(orientation))
{
   // Do something when in landscape
}
else
{
   // Do something when in portrait
}
4 голосов
/ 31 октября 2011
UIDeviceOrientation getCurrentOrientation() {
  UIDevice *device = [UIDevice currentDevice];
  [device beginGeneratingDeviceOrientationNotifications];
  UIDeviceOrientation currentOrientation = device.orientation;
  [device endGeneratingDeviceOrientationNotifications];

  return currentOrientation;
}

Вам нужно преобразовать UIDeviceOrientation в UIInterfaceOrientation.

2 голосов
/ 31 октября 2011

Когда приложение загружается, оно не знает его текущей ориентации -

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

После поворота устройства вы получаете правильную ориентацию, но когда приложение загружено, без изменения ориентации, кажется,что использование [[UIDevice currentDevice] orientation] не знает текущей ориентации.

Так что вам нужно сделать 2 вещи -

  1. Попробуйте установить принятые приложением ориентации устройства в файле plist
  2. В ваших UIViewControllers вам потребуется переопределить метод shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation), чтобы он возвращал YES, когда приложение должно rotate:
1 голос
/ 31 октября 2011

Если последовательность соответствующих вызовов означает, что вы не можете полагаться на interfaceOrientation, имеющую правильное значение на viewWillAppear, тогда - при условии, что родительский контроллер представления вращается - самая безопасная вещь, вероятно, self.parentViewController.interfaceOrientation.В противном случае вы можете попытаться сделать первое предположение из [[UIDevice currentDevice] orientation], что не всегда может быть 100% на деньгах (например, если устройство лежит на столе, когда ваше приложение запускается), но, вероятно, даст вам лучшее предположениечем всегда предполагая портрет.

...