Это ожидаемое поведение, поскольку представление предыдущего контроллера не находится в иерархии представлений до тех пор, пока не будет вызван метод popViewControllerAnimated:
, и вы вызовете его после завершения анимации.
Я не думаю, что добавление подпредставлений непосредственно в представление контроллера навигации - это хорошая идея, но следующий код должен работать для вас.
UINavigationController* navigationController;
CGRect frame;
//keep a reference to the navigation controller as
//[self navigationController] won't work after pop is called
navigationController = [self navigationController];
//remember the frame of the view relative to navigation controller's view
frame = [navigationController.view convertRect:self.view.frame fromView:self.view.superview];
//pop this controller, this will add the view of the
//previous controller into the view hierarchy
[navigationController popViewControllerAnimated:NO];
self.view.frame = frame;
//add this view on top of the previous one
[navigationController.view addSubview:self.view];
[UIView animateWithDuration:0.5f
delay:0.0f
options:0
animations:^{
self.view.alpha = 0.0f;
self.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
} completion:^(BOOL finished) {
[self.view removeFromSuperview];
}];
Кстати, UIViewAnimationCurveEaseInOut
не является правильной константой для параметра параметров. Для этого метода вы должны использовать константы, которые начинаются с UIViewAnimationOption
.