Я работаю над приложением (моим первым), которое в основном является приложением TabBar.Чтобы быть более точным, есть: - контроллер вида входа в систему - контроллер панели вкладок (когда вход выполнен) - контроллер вида в горизонтальной плоскости, который используется, когда первый элемент TabBar переключается с книжного на альбомный.
Итак, когда я на первой вкладке, мне нужно иметь возможность перейти в альбомную ориентацию, чтобы отобразить некоторые другие данные.В моем контроллере панели вкладок я реализовал эти методы:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if([self selectedIndex] == 0)
return YES;
return NO;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
// Get AppDelegate
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
// Remove TabBarView and add graph Landscape View
[self.view removeFromSuperview];
[delegate setSubViewLandscapeViewController];
}
}
В делегате я реализовал setSubViewLandscapeViewController и setSubViewTabBarController:
- (void)setSubViewTabBarViewController {
[window addSubview:[tabBarController view]];
}
- (void)setSubViewGraphLandscapeViewController {
[window addSubview:[landscapeViewController view]];
}
Я хочу, чтобы landscapeViewController отображал тольков ландшафтном режиме, у меня есть (в моем ландшафтном ViewController):
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
NSLog(@"willRotateToInterfaceOrientation");
}
Часть этого работает нормально, я имею в виду переключение с портретного на ландшафтное (когда я на первой вкладке),tabbarcontroller удаляется из SuperView, и вместо него добавляется вид ландшафта.
Дело в том ... Я не знаю, как переключиться обратно в портретный режим (а затем загрузить предыдущий контроллер, tabBarодин с использованием setSubViewTabBarViewController моего делегата).Кажется, что ни одна из willRotateToOrientation, willRotateFromOrientation, .. не запускается, когда я фактически перемещаю устройство из альбомной ориентации ...
Короче говоря, когда я нахожусь в альбомной ориентации, я не знаю, что делать сВернитесь к представлению панели вкладок ... Я как будто застрял в альбомной ориентации, как только попал в нее.
Большое спасибо за вашу помощь,
Люк