Я сделал нечто похожее на то, что вы описываете, то есть изменил стандартную анимацию для pop и push-view в UINavigationController.
Идея состоит в том, чтобы отключить анимацию по умолчанию для объекта и заменить ее собственной анимацией. Я создал новую категорию для UINavigationController и использовал функцию, аналогичную приведенной ниже.
- (void) altAnimatePopViewControllerAnimated:(BOOL)animated
{
[CATransaction begin];
CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush; // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;
CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];
[self popViewControllerAnimated:YES];
[CATransaction commit];
}
чтобы использовать, просто используйте код
[self.navigationController altAnimatePopViewControllerAnimated:YES];
Чтобы сделать толчок, просто создайте еще одну похожую функцию и поверните анимацию в обратном направлении.
Это не идеально, но работает. Когда вы выбираете разные типы анимации, поэкспериментируйте с различными подпредставлениями, составляющими навигационную панель / контроллер, чтобы сделать ее идеальной.
Взял мой довольно белый, чтобы придумать это, так что используйте его с умом:)
******* РЕДАКТИРОВАТЬ
Попробуйте заменить push-переход следующим (Сам не пробовал):
CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
scale.duration = duration;
scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
[NSNumber numberWithFloat:1.2f],
[NSNumber numberWithFloat:.85f],
[NSNumber numberWithFloat:1.f],
nil];
Это вызовет всплывающее окно, т. Е. Представление будет больше, прежде чем оно достигнет нужного размера. Поиграйте со значениями в массиве, чтобы управлять кривой анимации.