Я не совсем понимаю, почему у меня возникла эта проблема, но я… По сути, у меня есть контроллер панели вкладок с navigationController
на одной из вкладок. На этой конкретной вкладке я хочу, чтобы пользователь мог повернуть устройство и увидеть совершенно другой вид, не повернутый исходный вид!
Для этого (в полноэкранном режиме) у меня есть LandscapeViewController
, который я представляю модально, когда устройство находится в альбомной ориентации. Проблема возникает, когда я представляю modalViewController
…
В LandscapeViewController
я также проверяю ориентацию, поэтому я могу закрыть себя, когда пользователь вернется в портретный режим. Однако, когда я представляю его, я получаю обратный вызов, говорящий, что он переходит в портретный режим, что полностью его портит!
Вот код и операторы журнала, чтобы прояснить, что происходит.
Портретвиевконтроллер
(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
NSLog(@"Norm going Portrait");
[self changeTheViewToPortrait:YES andDuration:duration];
}
else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
NSLog(@"Norm going Landscape");
[self changeTheViewToPortrait:NO andDuration:duration];
}
}
(void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5.];
if(portrait){
NSLog(@"dismissed");
[self dismissModalViewControllerAnimated:NO];
}
else{
NSLog(@"presented");
LandscapeOverviewViewController *land = [[LandscapeOverviewViewController alloc]initWithNibName:@"LandscapeOverviewViewController" bundle:nil];
land.delegate = self;
[self presentModalViewController:land animated:NO];
[land release];
}
[UIView commitAnimations];
}
Ландшафтвиевконтроллер
(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
NSLog(@"Modal is going Portrait");
[self changeTheViewToPortrait:YES andDuration:duration];
}
else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
NSLog(@"Modal is going Landscape");
[self changeTheViewToPortrait:NO andDuration:duration];
}
}
(void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
if(portrait){
NSLog(@"calling delegate to dismiss");
[delegate landscapeViewController:self didRotateBack:(YES)];
}
[UIView commitAnimations];
}
и это текст журнала:
Нормативный пейзаж
2010-08-24 15:29:40.024 Приложение[32461:207] представлено
2010-08-24 15:29:40.026 App[32461:207] Модальный режим находится в портретном режиме
2010-08-24 15:29:40.026 App[32461:207] вызывает делегата для увольнения
2010-08-24 15:29:40.027 Вызван делегат App[32461:207]
Как вы можете видеть, когда я в портретном режиме и я поворачиваю, он делает правильную вещь, представляя landscapevc
, но затем он думает, что это в портретном режиме, и пытается отклонить.
Может ли кто-нибудь увидеть, где я ошибаюсь? (И извините за длину этого, но иначе форматирование кода не работало бы должным образом.)