Мое приложение основано на навигации и в основном работает в портретной ориентации, но один контроллер представления поддерживает как портретную, так и альбомную ориентацию. Теперь проблема в том, что когда я нажимаю новый контроллер вида из контроллера ландшафтного вида, новый контроллер вида также нажимается в ландшафтном режиме, хотя я хочу, чтобы он был в портретном режиме.
Кроме того, когда я выдвигаю контроллер представления из ландшафтного контроллера, всплывающий контроллер представления отображается в портретном режиме.
Я не знаю, что не так с моим кодом.
Вот мой фрагмент кода и информация, используемая для поддержки этой ориентации.
В файле info.plist я сохранил поддержку всех ориентаций, кроме портретной перевернутой.
Я также добавил категорию для категории навигационного контроллера, как показано ниже.
@implementation UINavigationController(Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end
Я также создал подкласс UIViewController, который действует как суперкласс для всех классов. Вот методы ориентации для суперкласса.
@implementation ParentViewController
- (BOOL)shouldAutorotate{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationPortrait;
}
@end
Контроллер методов ориентации, поддерживающий альбомную ориентацию, показан ниже.
@implementation LandscapeController
#pragma mark -
#pragma mark Orientation Methods
- (BOOL)shouldAutorotate{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscape;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
return (toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
Заранее спасибо.