如何在所有其他视图之前以模态方式呈现“启动视图”?

Posted

技术标签:

【中文标题】如何在所有其他视图之前以模态方式呈现“启动视图”?【英文标题】:How to present a 'launch view' modally before all other views? 【发布时间】:2011-10-25 09:07:11 【问题描述】:

在我的基于标签栏的应用程序中,我需要呈现一个“启动视图”,其作用类似于启动图像。它包含一个显示多个图像的滚动视图。由于它不属于基于标签栏的主要架构,我想以模态方式呈现它。

现在我的问题是在哪里启动它。我在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法内的[self.window makeKeyAndVisible]; 之后运行[self.window.rootViewController presentModalViewController:launchViewController animated:YES];

它有效,但主标签栏视图将在“启动视图”出现之前不久出现。我需要在所有其他视图之前显示“启动视图”。

【问题讨论】:

【参考方案1】:

以模态方式呈现它

- (void)viewDidAppear:(BOOL)animated

你的根视图控制器。

同样在没有动画的情况下显示它 - 它会阻止在短时间内显示标签栏。

[self presentModalViewController:launchViewController animated:NO];

【讨论】:

我的根视图控制器是一个UITabBarController,我需要继承它来定义viewDidAppear方法吗? 你的标签栏控制器里面必须有一些视图控制器。其中一个将首先介绍。将模态显示添加到第一个选项卡视图控制器 viewDidAppear 中。您的方式也很好,但是您必须将动画设置为 NO。如果您使用动画呈现模态视图,则使用过渡样式。动画过渡在第二个视图之前显示第一个视图 - 这就是标签栏视图很快出现的原因。 我不确定我是否理解正确。当我在第一个选项卡栏项内的视图控制器的 viewDidAppear 方法中添加模态视图的呈现时,当我关闭模态视图时,模态视图将一次又一次地出现。我也试过继承一个UITabBarController来自定义viewDidLoad方法,让它成为窗口的rootViewController,但是没有被调用。 通常你只想展示一次“launch view”。我通常创建 BOOL 标志,例如BOOL showStartScreen;,在第一次演示后我将其设置为 NO。在 viewDidAppear 我检查了这个标志。关于 UITabBarController 的子类化 - 文档 sais:此类不适用于子类化。它可能会带来一些麻烦。 有时,(它似乎只发生在 ios 5 上,而不是 6 上),我看到我的初始视图短暂闪烁。有什么办法可以防止吗?

以上是关于如何在所有其他视图之前以模态方式呈现“启动视图”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?

当视图控制器以模态方式呈现时,用户可以滚动

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

如何在保持导航栏存在的同时以模态方式呈现视图控制器。 (对于设置视图控制器)

以非模态方式呈现视图

如何在一种情况下推送视图控制器,但在另一种情况下以模态方式呈现它?