У меня есть ViewControllers A и B в стеке навигации. A не поддерживает ландшафтную ориентацию, B делает. Если пользователь во время просмотра B поворачивается в горизонтальном направлении, а затем нажимает кнопку «Назад», теперь A находится в ландшафте. Как я могу это предотвратить? Есть ли веская причина, почему метод toAutorotateToInterfaceOrientation A не соблюдается?Как разрешить вращение только одного вида в стеке навигации?
ответ
Это действительно очень неприятная вещь в контроллерах представлений. И, похоже, это не проблема для авторотации. Может быть, лучшим было бы возвращение NO от B's shouldAutorotateToInterfaceOrientation, а затем выполнить поворот изображения вручную. Тогда это не будет влиять на A.
Вытягивая мои волосы! Как вы вручную изменяете ориентацию? Проблема в том, что мне нужно иметь реальную смену ориентации, чтобы клавиатура отображалась с нужного места. –
да, я ненавижу это слишком ... все я нашел, чтобы решить это должно было сделать это сам:
- (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
Спасибо за код здесь. Я думаю, что предложение Макса об обработке вращения отдельно в каждом viewController немного чище. – initlaunch
Я не понимаю, почему Cocoa Touch подходит ко всем этим длинам со всем бизнесом авторотации, но затем не учитывает эту простую и очень распространенную ситуацию. +1 для этого. – epologee