2011-02-06 3 views
4

У меня есть ViewControllers A и B в стеке навигации. A не поддерживает ландшафтную ориентацию, B делает. Если пользователь во время просмотра B поворачивается в горизонтальном направлении, а затем нажимает кнопку «Назад», теперь A находится в ландшафте. Как я могу это предотвратить? Есть ли веская причина, почему метод toAutorotateToInterfaceOrientation A не соблюдается?Как разрешить вращение только одного вида в стеке навигации?

+2

Я не понимаю, почему Cocoa Touch подходит ко всем этим длинам со всем бизнесом авторотации, но затем не учитывает эту простую и очень распространенную ситуацию. +1 для этого. – epologee

ответ

2

Это действительно очень неприятная вещь в контроллерах представлений. И, похоже, это не проблема для авторотации. Может быть, лучшим было бы возвращение NO от B's shouldAutorotateToInterfaceOrientation, а затем выполнить поворот изображения вручную. Тогда это не будет влиять на A.

+0

Вытягивая мои волосы! Как вы вручную изменяете ориентацию? Проблема в том, что мне нужно иметь реальную смену ориентации, чтобы клавиатура отображалась с нужного места. –

1

да, я ненавижу это слишком ... все я нашел, чтобы решить это должно было сделать это сам:

- (void)myAutomaticRotation{ 
    if (A.view.frame.size.width > A.view.frame.size.height) { 
     [UIView beginAnimations:@"View Flip" context:nil]; 
     [UIView setAnimationDuration: 0.5f]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(M_PI/2); 
     self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f); 
     A.view.frame = CGRectMake(0,0,320, 480); 
     [UIView commitAnimations]; 
    } 
} 

вы можете позвонить myAutomaticRotation в основной/супер UIViewController, когда вы переходите к A.view, и в том же месте, вы должны использовать:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

} 

, где вы можете проверить вид, используемый (A, B) и позволяющий ландшафтный режим только для B ...

luca

+0

Спасибо за код здесь. Я думаю, что предложение Макса об обработке вращения отдельно в каждом viewController немного чище. – initlaunch