Как определить, что ориентация устройства отличается от ориентации интерфейса?
Первоначально подкласс UINavigationController
(Navigator
) является корневым контроллером и поддерживает все ориентации. Подкласс переопределяет supportedInterfaceOrientations
и предоставляет свойства, чтобы установить, какая ориентация поддерживается.
Контроллер корневого представления Navigator
S стека навигации (подкласс 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, но не могу найти ссылку на этот вопрос)