Проблема ориентации интерфейса iPad - PullRequest
1 голос
/ 08 июля 2011

Когда пользователь нажимает на UIView (который является полноэкранным), мое приложение должно определить ориентацию и выполнить некоторые действия.Но есть одна крошечная проблема.Если я запускаю приложение в ландшафтном режиме, а пользователь нажимает фоновую переменную 'interfaceOrientation', значение равно '0', и я не знаю, как изменить порядок элементов представления.Если я поворачиваю симулятор один раз, то все в порядке, но если нет, то interfaceOrientation равен 0.Что тут делать?

UIInterfaceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];

if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    {        
       ...            
    }  
    else if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {       
        ...
    }
    else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
...
}

Ответы [ 3 ]

3 голосов
/ 08 июля 2011

Я не уверен, насколько хорошо это разрешимо.UIDeviceOrientationUnknown равно 0. Это означает, особенно для iPad, у которого нет гироскопа, что ориентация в это время просто неизвестна.Представьте, что ваш iPad лежит на столе, и пользователь запускает ваше приложение: нет никаких средств определить, что ваше приложение на самом деле работает в горизонтальной или вертикальной ориентации, если вы не наклоните устройство соответствующим образом.Следовательно .. ориентация при запуске всегда 0 (неизвестно).

2 голосов
/ 08 июля 2011

Вы применяете тип UIDeviceOrientation к типу UIInterfaceOrientation. Ориентации устройства имеют несколько различных значений, помимо ориентации интерфейса.

Попробуйте использовать:

 UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

switch (deviceOrientation) {
    default:
    case UIDeviceOrientationPortrait:
    case UIInterfaceOrientationPortraitUpsideDown:
    case UIDeviceOrientationUnknown:
        //...
        break;
    case UIDeviceOrientationLandscapeLeft:
        //...
        break;
    case UIDeviceOrientationLandscapeRight:
        //...
        break;
}

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

0 голосов
/ 08 июля 2011

У вас должна быть возможность доступа к [UIApplication sharedApplication].statusBarOrientation, если вы не можете получить доступ к self.interfaceOrientation с вашего контроллера представления.

Кроме того, иногда вызов self.interfaceOrientation в viewDidLoad рискован, поскольку представление загружается до того, как узнает о своей ориентации, поэтому оно будет выполнять поворот позже. В этом случае попробуйте найти его в viewWillAppear.

Или просто переопределите willRotateToInterfaceOrientation:duration и передайте эту информацию в UIView, который в ней нуждается. Примечание: это не будет вызвано, если у вас есть xib, установленный на эту ориентацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...