Ответ 1
Просмотрите следующее видео с WWDC этого года (около отметки 30 минут). Там есть ссылка на образец кода внизу.
https://developer.apple.com/videos/wwdc/2015/?id=215
Возможно, вам придется ждать iOS 9:)
Удачи!
Предположим, что у меня есть 3 UIViewController
- A, B и C. Переходы между A < B и B > C выполняются с различными анимированными переходами в обоих направлениях - вперед и назад (анимация размотки segue) подклассификация UIViewControllerTransitioningDelegate
и UIViewControllerAnimatedTransitioning
. Переходы всего на один шаг вперед или назад работают отлично, но когда я пытаюсь расслабиться больше чем на один шаг назад от C- > A (например, домашняя кнопка) - B отображается без анимации, а затем B- > воспроизводится пользовательская анимация, который выглядит странно. viewWillApper
вызывается для всех контроллеров среднего звена в цепочке (в моем примере B). Это почти похоже на расслабление от C- > A делается таким образом - C- > B- > A вместо C- > A (с одной записью - воспроизводится только анимация B- > A, анимация C- > B не играл). То, что я хочу, это просто анимация C- > A (не B- > A), без отображения каких-либо других контроллеров среднего вида или вызова их методов viewWillAppear
. Я хочу иметь возможность настраивать анимацию разворачивания segue для C- > A. Как я могу это сделать?
ПРИМЕЧАНИЕ 1. Я не внедряю свои контроллеры в UINavigationController, и я не хочу этого делать, потому что, насколько я знаю (исправьте меня, если я ошибаюсь), он не очень гибкий или, по крайней мере, масштабируемый для разных пользовательских анимаций между различные этапы. Я предпочитаю не использовать его.
ПРИМЕЧАНИЕ 2: Я попытался переопределить
override func segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue
в A и вернуть пользовательский segue (UIStoryboardSegue
производный класс) для разматывания из C- > A. Этот метод был вызван, но анимация запускается, и в середине она переключается на B- > Анимированную анимацию делегата перехода (которую я установил для перехода между B- > A). Так что это тоже не работает.
Что я делаю неправильно? Я почти уверен, что разработчики Apple это поняли и сделали какой-то API или что-то в этом роде. В документации Apple нет ничего о том, как отменить несколько шагов назад с помощью настраиваемой анимации.
И последнее, что нужно сделать, несколько шагов назад работает отлично, просто пользовательская анимация не работает или, по крайней мере, я не могу заставить ее работать.
Любая помощь будет высоко оценена.
Просмотрите следующее видео с WWDC этого года (около отметки 30 минут). Там есть ссылка на образец кода внизу.
https://developer.apple.com/videos/wwdc/2015/?id=215
Возможно, вам придется ждать iOS 9:)
Удачи!
Я понимаю, что в вашем вопросе вы четко заявили, что не хотите использовать UINavigationController
, и я это понимаю. Поэтому нужно принять этот ответ.
Но я бы по-прежнему предлагал использовать UINavigationController
в этом сценарии, поскольку он предлагает большую поддержку отслеживания навигации и на самом деле очень гибкий, если расширен, и даже предлагает пользовательские переходы через UINavigationControllerDelegate
и UIViewControllerAnimatedTransitioning
.
Когда дело доходит до навигации, вы можете вручную манипулировать навигационным стекем, используя .pushToViewController()
и .popViewController()
или напрямую манипулируя списком контроллеров в .viewControllers
или popToRootController()
.
Я использовал UIKit
и UINavigationController
в игре, которая нуждалась в довольно тяжелых переходах, и, на мой взгляд, это может потребовать много настроек и по-прежнему предлагает большую помощь в навигации.