Проблемы вращения ModalViewController в TabBarController - PullRequest
1 голос
/ 24 августа 2010

Я не могу понять, почему у меня возникла эта проблема, но я ..... В основном у меня есть контроллер панели 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

1 Ответ

1 голос
/ 24 августа 2010

Реализовали ли вы метод mustAutorotateToInterfaceOrientation: в контроллере альбомной ориентации?Если нет, этот контроллер представления будет вынужден оставаться в портретном режиме, что, в свою очередь, вызовет ваш код отклонения.

Стоит также отметить, что иногда контроллеры представления добавляются в окно в определенной ориентации, а затемповорачивается.Стоит проверить ориентацию, которую willRotate передает вам, против вашего текущего вращения.Я не проверял это довольно давно, но в конце 2.x / начале 3.0 дней это было обычным делом.

...