如何在自定义导航中添加 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 之间的延迟?的主要内容,如果未能解决你的问题,请参考以下文章