Это ожидаемое поведение, как я его вижу.Если UIVC не находится на вершине стека, то не следует вызывать willAnimateRotationToInterfaceOrientation, поскольку в это время вращение не анимируется.То, как я справляюсь с этим в приложении, над которым я сейчас работаю, похоже на приведенный выше плакат.Любой UIVC, который поддерживает все ориентации, получает новый метод
- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation;
Этот метод вызывается из двух мест:
<code>
-(void) viewWillAppear: (BOOL) animated {
[super viewWillAppear: animated];
[self updateLayoutForNewOrientation: self.interfaceOrientation];
}</p>
<p>-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration {
[self updateLayoutForNewOrientation: interfaceOrientation];
}
Новый метод прост:
<code>
- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation {
if (UIInterfaceOrientationIsLandscape(orientation)) {
// Do some stuff
} else {
// Do some other stuff
}
}
Кроме того, если вы беспокоились о том, что код работает, когда он на самом деле не нужен, вы можете отследить ориентацию, в которой находилось устройство, когда был нажат новый UIVC.в стек через переменную экземпляра, установленную в viewDidDisappear, и проконсультируйтесь с ней, чтобы решить, хотите ли вы «делать вещи»