Ну, главная причина в том, что self.view (который в настоящее время «знает», что вы находитесь в ландшафте) заменяется новым представлением, в котором нет этой информации.Поэтому одна мысль состоит в том, чтобы просто поместить aViewController.view как subView в self.view (при условии, что aViewController непрозрачен).Ах, вы говорите, но тогда я теряю хорошую анимацию transitionFromView.Что ж, попробуйте эту милость:
[UIView transitionWithView:self.view
duration:2
options:UIViewAnimationOptionTransitionCurlUp
animations:^{
[self.view addSubview:aViewController.view];
}
completion:NULL];
Если по какой-то причине это не работает для вас, альтернативой является «научить» aViewController.view, что это действительно альбомная ориентация:
#define DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) / 180.0 * M_PI)
-(void)setNewViewToLandscape:(UIView*)viewObject {
//assumes self.view is landscape and viewObject is portrait
[viewObject setCenter:CGPointMake( self.view.frame.size.width/2,self.view.frame.size.height/2)];
CGAffineTransform cgCTM = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(90));
viewObject.transform = cgCTM;
viewObject.bounds = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
}
MyViewController *aViewController = [[MyViewController alloc] initWithNibName:NSStringFromClass([MyViewController class]) bundle:nil];
[self setNewViewToLandscape:aViewController.view];
[UIView transitionFromView:self.view
toView:aViewController.view
duration:2
options:UIViewAnimationOptionTransitionCurlUp
completion:NULL];
Еще один незначительный дополнительный момент заключается в том, что ваш aViewController имеет утечку, поэтому вы должны сделать его сохраненным свойством родительского viewController.