Я пришел в SO в поисках более элегантного решения, но вот как я (успешно) делал это до сих пор.
Основная идея:
- НЕ используйте UINavigationController; вместо этого используйте его составные части (например, UINavigationBar) и выполняйте работу самостоятельно
- Запустить навигационную панель для анимации параллельно с вашими собственными анимациями (или нет, если вы вообще не хотите анимировать)
Недостатки:
- UINavigationController обрабатывает некоторые другие вещи, такие как загрузка / выгрузка памяти, автоматически. Кроме того, он «жестко запрограммирован» во всех UIViewController - они ВСЕГДА имеют ссылку на UINavigationController, который их содержит. Стыдно выбрасывать все это только потому, что Apple не предоставляет возможности для настройки пользовательских анимаций.
Код - в зависимости от того, какой класс заменит анимацию:
UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
// next line only needed if you want a custom back anim too
navigationController.navigationBar.delegate = self;
... если вы также хотите включить пользовательскую анимацию спины, вам нужна последняя строка выше, чтобы вы могли затем слушать навигационную панель и параллельно реагировать следующим образом:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
// trigger your custom back animation here
return TRUE;
}