在另一个视图控制器中显示视图控制器时如何防止闪烁

Posted

技术标签:

【中文标题】在另一个视图控制器中显示视图控制器时如何防止闪烁【英文标题】:How to prevent flickering when showing a view controller in another view controller 【发布时间】:2014-09-01 20:14:50 【问题描述】:

我只想在第一次显示主视图控制器时显示一次视图。

-(void) viewDidAppear:(BOOL)animated

    if (!self.isMainViewShowedBefore)
    
        self. self.isMainViewShowedBefore = YES;

        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: temporaryViewController];

        [self presentViewController:navigationController animated:NO completion:NULL];
    

它可以工作,但在显示临时视图控制器之前,主屏幕会出现一小段时间。

我尝试在 viewWillAppear 中添加上述代码,但出现以下错误

'NSInternalInconsistencyException',原因:'试图开始一个 模态转换 虽然过渡已经在 进步。等待 viewDidAppear/viewDidDisappear 知道当前 过渡已完成'

如何在显示临时视图控制器之前隐藏主控制器?

【问题讨论】:

【参考方案1】:

temporaryViewController.view 添加为self.view(您的主视图控制器)的子视图

[self.view addSubview:temporaryViewController.view];

【讨论】:

【参考方案2】:

您在 viewWillAppear 中遇到错误,因为您不能在 ios 中同时制作两个动画,这可能会导致您的应用崩溃,但大多数时候 iOS 对我们很好,它只是给我们一个警告。

现在我主要关心的是,如果你根本不想使用这个主视图控制器,为什么还要添加它?而且这不是闪烁,这是正常行为,如果您希望 UINavigationController 出现,只需播种它而不是这个“主视图控制器”。

如果你有更多隐藏的逻辑会阻止你按照我说的去做,请告诉我。

【讨论】:

这是一个照片应用程序,我想在第一次加载时裁剪照片。 裁剪视图控制器是第三方控制器,我不想更改它

以上是关于在另一个视图控制器中显示视图控制器时如何防止闪烁的主要内容,如果未能解决你的问题,请参考以下文章

模态segue推动顶部的附加导航栏滑动

如何在另一个视图控制器上向 UInavigationcontroller 显示完整的选定表格单元格

闪烁动画问题

从后台恢复显示 ModalViewController,避免下面的内容闪烁

Objective-C 以编程方式在另一个视图控制器上显示视图控制器

如何将 int 值加载到文本字段并显示在另一个集合视图控制器的标签上