如何在自定义导航中添加 viewwillappear 和 viewdidappear 之间的延迟?

Posted

技术标签:

【中文标题】如何在自定义导航中添加 viewwillappear 和 viewdidappear 之间的延迟?【英文标题】:How to add delay between viewwillappear and viewdidappear in custom navigation? 【发布时间】:2015-07-06 07:32:24 【问题描述】:

当视图控制器推送到导航控制器时,viewwillappear 和 viewdidappear 之间存在延迟。 Viewwillappear 会立即调用,而 viewdidappear 会在动画完成后调用。

我想做一个自定义导航。 Viewcontroller A 是一个容器视图控制器。它将包含viewcontroller B 或viewcontroller C。首先,viewcontroller 包含viewcontroller B(A 是B 的父控制器)。然后控制器 B 将通过转换导航到控制器 C。

但是 viewdidappear 将在 viewwillappear 之后立即被调用,当 addsubview 被调用时。如何在 viewwillappear 和 viewdidappear 之间添加延迟?我希望viewwillappear在动画之前被调用,viewdidappear在动画之后被调用。你能帮帮我吗?

【问题讨论】:

视图控制器 B 的视图中有一个按钮。当点击按钮时,它将导航到控制器 C。它看起来像 pushviewcontroller。不同之处在于,viewcontroller B 将被释放。 我不想使用navigationcontroller和pushviewcontrller,因为有很多viewcontrollers(viewcontroller D, viewcontroller E...),我不想在没有显示的时候把它们留在内存中. 【参考方案1】:

这样怎么样?

    只有一个容器 - 视图控制器 A。 B、C、D...都是子视图,而不是视图控制器。 首先,视图控制器A默认有视图B。 然后单击视图 B 中的按钮。 为 C 制作动画,然后在完成块中隐藏 B 或删除 B。

希望这有帮助。

【讨论】:

【参考方案2】:

有一个手动延迟的好方法,试试把这个放在viewwillappear的底部

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
  NSLog(@"Do some work");
);

希望这会有所帮助。

【讨论】:

以上是关于如何在自定义导航中添加 viewwillappear 和 viewdidappear 之间的延迟?的主要内容,如果未能解决你的问题,请参考以下文章

如何快速在自定义导航栏顶部制作一半的 ImageView

在自定义视图控制器转换中抑制导航推送动画

Ios Swift:在自定义标签栏中显示导航栏

在自定义导航栏 wordpress 中突出显示当前页面

使用堆栈导航在自定义标题之间传递文本输入

在自定义表格视图单元格按钮操作中导航到另一个 Viewcontroller