Как определить, что ориентация устройства отличается от ориентации интерфейса?

Первоначально подкласс UINavigationController (Navigator) является корневым контроллером и поддерживает все ориентации. Подкласс переопределяет supportedInterfaceOrientations и предоставляет свойства, чтобы установить, какая ориентация поддерживается.

Контроллер корневого представления NavigatorS стека навигации (подкласс UITableViewContreller) контролирует поддерживаемые ориентации (в зависимости от того, какой контроллер представления находится на вершине стека). Это устанавливает Navigatorсвойства ориентации в didSelectRowAtIndexPath переопределения.

Если переход выполняется, когда устройство находится в другой ориентации (поскольку текущий вид не поддерживает его, и это не является предполагаемым способом взаимодействия), и новый вид поддерживает эту ориентацию устройства, вид остается в другой ориентации, чем ориентация устройства. Затем нужно повернуть устройство и сдвинуть его назад, чтобы придать правильную ориентацию.

Это если кто-то по какой-то причине будет держать устройство в альбомном режиме в приложении "Контакты", но вдруг одно из его подпредставлений будет поддерживать альбомную ориентацию и автоматически поворачиваться, не поворачивая устройство в портретную, а затем альбомную ориентацию. Вопрос в том, как это реализовать?

3 ответа

Используйте это в каждом методе:

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
    ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
{       

} 
else 
{

}

или проверьте [[UIScreen mainScreen] bounds]

Я думаю, что ты хочешь этого.

Чтобы получить ориентацию устройства:

[[UIDevice currentDevice] orientation];

Чтобы получить текущую ориентацию представлений, показали:

[UIApplication sharedApplication].statusBarOrientation;

Добавьте этот метод к вашему подклассу UINavigationController:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        return;

    if ([UIViewController respondsToSelector:@selector(attemptRotationToDeviceOrientation)]) {
        //present/dismiss viewcontroller in order to activate rotating.
        UIViewController *mVC = [[UIViewController alloc] init];
        [self presentModalViewController:mVC animated:NO];
        [self dismissModalViewControllerAnimated:NO];
    }
}

(Нашел его здесь на SF, но не могу найти ссылку на этот вопрос)

Другие вопросы по тегам