0

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

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

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

再次您好,@Vlad 设置代表的解决方案非常感谢。

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

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

我再次请求您的支持;)

4

1 回答 1

1

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

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

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

两个重要的信息是:

  1. viewDidLoad 仅在视图完成加载时调用一次,而不是在弹出后再次出现时调用。
  2. navigationController?.delegate 只能指向一个委托。
于 2018-10-07T09:11:36.710 回答