Я пытаюсь сделать два разных пользовательских перехода (один плавный переход и один слайд сверху) в контроллере навигации.
Переход работает очень хорошо в первый раз, но когда всплывает, переходы выглядят сумасшедшими. Я предполагаю, что navigationController.delegate - это ключ, но я не могу понять это сам. Любая помощь будет оценена большое спасибо
******************************* ОБНОВЛЕНИЕ ВОПРОСА IOS14 *************** **************************
И снова здравствуйте, решение @Vlad для настройки делегата работает большое спасибо.
Но недавно в IOS14 меню стека появлялось при обнаружении жеста длительного нажатия на кнопке перехода назад (что позволяет пользователю перемещаться по стеку контроллеров представления контроллера навигации).
И поэтому делегат navigationcontroller устанавливает неправильный контроллер при установке двух или более контроллеров.
Еще раз прошу вашей поддержки;)
Конечно @Vlad, спасибо за ответ. A нажимается на B с помощью anim1, затем B нажимается на C с помощью anim2, все работает нормально. При pop, C попадает в B с помощью anim2, как и ожидалось, но B попадает в A с anim2, что неверно. И затем, если A снова нажимается на B, он нажимается с анимацией по умолчанию (слайд в анимации яблока). Я использую простой "UIViewControllerAnimatedTransitioning", "navigationController? .Delegate = self" установлен в viewdidload, а "transitioningDelegate" установлен при подготовке к переходу.
Спасибо за эту информацию. Я отправил ответ на основе предоставленной вами информации. Дайте мне знать, если вам понадобится дополнительная информация, чтобы понять проблему.
Ваше начальное состояние находится в VC A. После viewDidLoad для navigationController? .Delegate устанавливается значение VC A, которое использует anim1. Когда вы нажимаете B, вы устанавливаете navigationController? .Delegate на B, который использует anim2.
Когда вы переходите от C к B, anim2 используется как navigationController? .Delegate - это VC B. Когда вы перемещаетесь от B к A, используется anim2, потому что navigationController? .Delegate - это еще VC B.
Когда вы открываете B, для navigationController? .Delegate устанавливается значение ноль, потому что экземпляр VC B уничтожается. Вот почему, когда вы снова пытаетесь нажать B, используется анимация по умолчанию.
Две важные части информации:
Спасибо за объяснение @Vlad. Как вы думаете, можно ли заставить его работать с NavigationController? Или мне нужно сделать от A до B с помощью push и от B до C с модальным представлением, чтобы иметь две разные анимации?
Да, это возможно. Вы можете установить делегата в viewDidAppear вместо viewDidLoad. Таким образом, переход будет настраиваться каждый раз при появлении VC. Итак, если появится VC A, тогда будет использоваться anim1, а затем, когда появится VC B, будет использоваться anim2. Затем, когда вы вернетесь к VC A, переход снова будет установлен на anim1.
Можете ли вы доказать больше подробностей, чем просто «безумие»? В каком венчурном фонде вы находитесь, когда попадаете; A, B или C? Можете ли вы предоставить образец кода?