Я бы переместил представления вручную и анимировал их, используя блок анимации:
// Get position of old view controller
CGPoint center = [oldViewController.view center];
// Position new view controller to the right of old one
[newViewController.view setCenter:CGPointMake(center.x + 320, center.y)];
// Animate change
[UIView beginAnimations:@"myAnimation" context:NULL];
// Move old view off screen
[oldViewController.view setCenter:CGPointMake(center.x - 320, center.y)];
// Move new view onto screen
[newViewController.view setCenter:center];
// Set animation delegate to self so that we can detect when animation is complete
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationComplete:finished:target:)];
// Finish animation block
[UIView commitAnimations];
Если вам нужно фактически нажать новый контроллер вида с помощью контроллера навигации, вам нужно убедиться, что вы делаете это после завершения анимации, иначе старый вид не будет отображаться. Для этого вам нужно использовать метод setAnimationDelegate, чтобы получать уведомления о завершении анимации и передавать вызываемый метод селектора. Реализуйте приведенный выше код и следующий метод в одном классе:
(void)animationComplete:(NSString *)animationId
finished:(BOOL)finished
target:(UIView *)target
{
if([animationId isEqualToString:@"myAnimation"])
{
// Push viewcontroller here
}
}