Это имеет два аспекта. 1. Как заблокировать ориентацию для каждого контроллера представления по мере необходимости.
Но это само по себе не вращает устройство. Когда вы находитесь в портретной ориентации, а следующий отображаемый контроллер представления относится к альбомной ориентации, он все равно будет представлен в портретной ориентации. Вы можете повернуть устройство в портретное положение, и контроллер будет вращаться соответственно. В ландшафте он фиксируется в ландшафте и больше не может вращаться. Когда вы вернетесь к своему портретному контроллеру, он будет представлен в альбомной ориентации ...
Итак, 2. вам нужно повернуть устройство.
Пункт 1 прост.
Реализуйте это во всех контроллерах, которые исправлены для портрета:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
И реализуйте это для ландшафтных контроллеров:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
<сильный>2. Для следующего шага вам нужно применить хитрость. Вы не можете программно повернуть устройство. Единственный способ добиться этого — повернуть строку состояния. После этого следующий модальный (!) контроллер представлен в новой ориентации. Это не работает для размещения контроллеров в стеке навигации. Хитрость заключается в том, чтобы модально представить любой (пустой) контроллер представления и сразу же удалить его. Теперь устройство повернуто, и вы можете поместить контроллер представления в стек. Это код, который я использовал на днях:
// Fetch the status bar from the app and set its orientation as required.
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];
// Create an empty view controller, present it modally and remove it directly afterwards
UIViewController *mVC = [[UIViewController alloc] init];
[self presentModalViewController:mVC animated:NO];
[self dismissModalViewControllerAnimated:NO];
// Now the device is rotated to the desired orientation. Go from there.
Если вы все равно работаете с контроллерами модального представления, то это, конечно, немного проще.
person
Hermann Klecker
schedule
05.04.2014