navigationController 中的两个不同的自定义转换

two different custom transitions in a navigationController

我正在尝试在导航控制器中进行两种不同的自定义过渡(一种淡入淡出,一种从顶部滑动)。

第一次过渡效果很好,但弹出时过渡效果很疯狂。 我猜 navigationController.delegate 是关键,但我无法自己弄清楚。 任何帮助将不胜感激 非常感谢

*********************************** IOS14 问题更新 ****** ************************************

您好, @Vlad 用于设置委托的解决方案非常有效,谢谢。

但最近在 IOS14 中,当在导航后退按钮上检测到长按手势时出现堆栈菜单(允许用户在导航控制器的视图控制器堆栈中导航)。

因此,当弹出两个或更多控制器时,导航控制器委托设置为错误的控制器。

我再次请求您的支持;)

你的起始状态是 VC A。 在 viewDidLoad 之后,navigationController?.delegate 被设置为 VC A,它使用 anim1。 当你推送到 B 时,你将 navigationController?.delegate 设置为 B,它使用 anim2.

当你从C弹出到B时,anim2被用作navigationController?.delegate是VCB。 当你从 B 弹出到 A 时,使用 anim2 因为 navigationController?.delegate 是 still VC B.

当你 pop B 时,navigationController?.delegate 被设置为 nil 因为 VC B 的实例被销毁了。 这就是为什么当您再次尝试按下 B 时,会使用默认动画。

两条重要的信息是:

  1. viewDidLoad 仅在视图加载完成时调用一次,而不是在弹出后再次出现时调用。
  2. navigationController?.delegate 只能指向一个委托。