Я не могу понять, почему у меня возникла эта проблема, но я ..... В основном у меня есть контроллер панели Tabr с навигационным контроллером на одной из вкладок. В этой конкретной вкладке я хочу, чтобы пользователь мог поворачивать устройство и видеть совершенно другой вид, повернут не исходный вид! Для достижения этого (на полном экране) у меня есть LandscapeViewController, который я присутствует модально, когда устройство находится в альбомной ориентации. Проблема возникает, когда я представляю modalViewController ..... в LandscapeViewController. Я также проверяю ориентацию, чтобы я мог отклонить себя, когда пользователь возвращается в портретный режим. Однако, когда я представляю это, я получаю ответный звонок, говорящий, что это входит в портретный режим, который полностью портит это!
Вот код и инструкции журнала, чтобы уточнить, что происходит ..
//in PortraitViewContoller
(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];
}
//in LandscapeViewController
(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 Приложение [32461: 207] Модал в движении Портрет
2010-08-24 15: 29: 40.026 Приложение [32461: 207] вызывает делегата для отклонения
2010-08-24 15: 29: 40.027 Делегат приложения [32461: 207] вызван
Как вы можете видеть, когда в портретном режиме я поворачиваюсь, он делает правильную вещь, представляя landscapevc, но затем он думает, что в портретной ориентации, и пытается уволить?
Может кто-нибудь увидеть, где я ошибаюсь, и извиняется за длину, но форматирование кода не будет работать должным образом.
Большое спасибо
Jules