Определение ориентации экрана, а не ориентации устройства - PullRequest
20 голосов
/ 16 мая 2011

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

Я попытался решить эту проблему несколькими способами, но на данный момент единственное, что мне удалось выработать, - это проверить, является ли ориентация LandscapeLeft или LandscapeRight и неЯ не предполагаю, что экран в портретной ориентации.К сожалению, это не так, когда устройство обращено вверх, а экран находится в альбомной ориентации.

Я попытался использовать ориентацию контроллера родительского вида:

parentController.interfaceOrientation;

К сожалению, оно вернулось UIDeviceOrientationUnknown.Я ищу в SO и Google кого-то еще, кто сталкивался с этой проблемой.Мне кажется глупым, что у Apple было бы что угодно, кроме LandscapeLeft/Right и PortraitUp/Down для их ориентации.

Что мне действительно нужно, так это ориентация приложений, а не устройства, поскольку они иногда расходятся.Любой совет?

1 Ответ

49 голосов
/ 16 мая 2011

Вы пробовали использовать UIInterfaceOrientationPortrait / UIInterfaceOrientationLandscape? Я обычно получаю довольно хорошие результаты, используя эти методы:

if(UIInterfaceOrientationIsPortrait(viewController.interfaceOrientation)) {
    //do portrait work
} else if(UIInterfaceOrientationIsLandscape(viewController.interfaceOrientation)){
    //do landscape work
}

Вы также можете попробовать UIDeviceOrientationIsValidInterfaceOrientation .

Они будут возвращать только ориентацию приложения, которая может отличаться от ориентации устройства.

Если они не работают, вы также можете попробовать:

[[UIApplication sharedApplication] statusBarOrientation]
...