Iphone: Невозможно вернуться из моего альбомного вида в портретный - PullRequest
1 голос
/ 30 июня 2010

Я работаю над приложением (моим первым), которое в основном является приложением 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, .. не запускается, когда я фактически перемещаю устройство из альбомной ориентации ...

Короче говоря, когда я нахожусь в альбомной ориентации, я не знаю, что делать сВернитесь к представлению панели вкладок ... Я как будто застрял в альбомной ориентации, как только попал в нее.

Большое спасибо за вашу помощь,

Люк

Ответы [ 2 ]

0 голосов
/ 05 июля 2010

Ну, мне удалось найти решение этой проблемы.Фактически, при переходе от портрета к ландшафту я удалил tabbarcontroller из подпредставления окна и добавил взамен ландшафтный контроллер.Кажется, это было не правильно.Вместо этого я добавляю landscapeViewController как подпредставление tabbarcontroller и удаляю его при переходе от ландшафта к портрету.Однако у меня все еще есть проблема с положением y в альбомной ориентации, которое, кажется, меняется, когда я делаю несколько поворотов подряд подряд ... С уважением, Люк

0 голосов
/ 01 июля 2010

Посмотрите на круговую диаграмму в CPTestApp-iPhone в папке примеров. Он обрабатывает вращение путем реализации -(void)didRotateFromInterfaceOrientation: и изменения размера графика после вращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...