Перед iOS 8 мы использовали ниже код в сочетании с методами делегирования supportedInterfaceOrientations и shouldAutoRotate, чтобы привязать ориентацию приложения к какой-либо конкретной ориентации. Я использовал ниже фрагмент кода для программного поворота приложения в нужную ориентацию. Во-первых, я меняю ориентацию строки состояния. А затем просто представление и немедленное отклонение модального представления поворачивает представление к желаемой ориентации.
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
Но это не работает в iOS 8. Кроме того, я видел некоторые ответы в переполнении стека, где люди предлагали, чтобы мы всегда избегали этого подхода с iOS 8 и далее.
Чтобы быть более конкретным, мое приложение является универсальным типом приложения. Всего три контроллера.
-
Контроллер First View. Он должен поддерживать все ориентации в iPad и только портрет (кнопка "домой" ) на iPhone.
-
Контроллер второго просмотра. Он должен поддерживать только ландшафт в любых условиях.
-
Третий контроллер просмотра. Он должен поддерживать только ландшафт в любых условиях.
Мы используем навигационный контроллер для навигации по страницам. Начиная с первого контроллера представления, при нажатии кнопки мы нажимаем второй на стек. Поэтому, когда приходит второй контроллер просмотра, независимо от ориентации устройства, приложение должно блокироваться только в ландшафтном режиме.
Ниже приведены мои методы shouldAutorotate
и supportedInterfaceOrientations
во втором и третьем контроллерах представления.
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeRight;
}
-(BOOL)shouldAutorotate {
return NO;
}
Есть ли какое-либо решение для этого или любого лучшего способа блокировки контроллера вида в определенной ориентации для iOS 8. Пожалуйста, помогите!!