Ios 在转换之间呈现不希望看到的ViewController

Ios 在转换之间呈现不希望看到的ViewController,ios,objective-c,iphone,uiviewcontroller,Ios,Objective C,Iphone,Uiviewcontroller,我有一个视图控制器HomeVC,负责管理其他三个视图控制器PhotopickerVC、CroppingVC和EditingVC之间的转换 当HomeVC辞退一个VC并呈现另一个VC时,我得到了一个不希望看到的效果,即HomeVC在这些转换之间的一瞬间是可见的 下面是关于我的代码的更多细节 应用程序的正常流程是HomeVC→ 光电传感器→ 种植VC→ EditingVC(PhotopickerVC和CroppingVC都只是帮助获得最终的EditingVC,它们被解雇后不再需要) 我使用HomeV

我有一个视图控制器HomeVC,负责管理其他三个视图控制器PhotopickerVC、CroppingVC和EditingVC之间的转换

当HomeVC辞退一个VC并呈现另一个VC时,我得到了一个不希望看到的效果,即HomeVC在这些转换之间的一瞬间是可见的

下面是关于我的代码的更多细节

应用程序的正常流程是HomeVC→ 光电传感器→ 种植VC→ EditingVC(PhotopickerVC和CroppingVC都只是帮助获得最终的EditingVC,它们被解雇后不再需要)

我使用HomeVC中的segues以以下形式实现此流程:

  • 从HomeVC visible开始,按下照片按钮,创建并显示(子类)
    UIImagePickerController
  • 选择照片时,(子类化)
    UIImagePickerController
    调用
    [picker dismissViewControllerAnimated:NO completion:nil]这将带我们回到HomeVC
  • 在HomeVC方法
    视图中将出现
    ,我调用
    [self-performsguewithidentifier:@“cropingvc”发送方:self]
  • 在CroppingVC中,当用户按下Accept按钮时,CroppingVC调用
    [自解除查看控制器激活:无完成:nil]这将带我们回到HomeVC
  • 在HomeVC
    视图中将出现
    ,我调用
    [self-PerformsgueWithIdentifier:@“EditingVC”发送方:self]
  • 在EditingVC中,当用户按Home键时,EditingVC调用
    [自我解除查看控制器激活:是完成:否]这将带我们回到HomeVC

  • 据我所见,您并不真正需要HomeVC来管理过渡。您应该做的是使VC层次结构与您编写的完全相同:

    HomeVC→ 光电传感器→ 种植VC→ 编辑VC

    箭头应该是例如push segues,然后在prepareforsgue方法中,您可以只传递所有必要的参数

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        YourViewController *destinationController = (YourViewController *)segue.destinationViewController;
        // do sth
    }
    

    通过这种方式,您可以实现良好且平滑的过渡。您的应用程序现在的方式似乎存在结构性缺陷,因为正如您所说,当ViewController使用一次时,就不再需要它了。之后,您可以返回HomeVC。

    据我所见,您并不真正需要HomeVC来管理过渡。您应该做的是使VC层次结构与您编写的完全相同:

    HomeVC→ 光电传感器→ 种植VC→ 编辑VC

    箭头应该是例如push segues,然后在prepareforsgue方法中,您可以只传递所有必要的参数

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        YourViewController *destinationController = (YourViewController *)segue.destinationViewController;
        // do sth
    }
    

    通过这种方式,您可以实现良好且平滑的过渡。您的应用程序现在的方式似乎存在结构性缺陷,因为正如您所说,当ViewController使用一次时,就不再需要它了。之后,您可以返回HomeVC。

    请添加代码,您如何解雇HomeVC?或者在HomeVC解散时提供另一个视图控制器。您可以在方法的完成处理程序中执行此操作,
    [VCObj dismissViewControllerAnimated:NO completion:[在此处呈现另一个VC]此视图控制器是否具有透明背景或alpha小于100%的背景颜色?如果它具有透明背景或颜色,请将其设置为“非透明”。@TusharJ,HomeVC永远不会被拒绝。在您建议在完成处理程序中演示时,在这种情况下,谁将是新演示的VC的演示者?您的意思是,您正在HomeVC上(或更高级别上,因为它们是演示的)跳舞三个不同的视图控制器。HomeVC负责管理它们。所以,当你关闭一个VC并显示另一个VC时,你可以在几秒钟内看到HomeVC。因此,无论你的行为是适当的。我更愿意说,建议等待一个视图控制器被解除,然后再显示另一个视图控制器。否则,您可能会收到类似“对VCObj开始/结束外观转换的不平衡调用”的警告。建议:您可以在此过程之间显示HUD。请添加代码,您如何拒绝HomeVC?或者在HomeVC解散时提供另一个视图控制器。您可以在方法的完成处理程序中执行此操作,
    [VCObj dismissViewControllerAnimated:NO completion:[在此处呈现另一个VC]此视图控制器是否具有透明背景或alpha小于100%的背景颜色?如果它具有透明背景或颜色,请将其设置为“非透明”。@TusharJ,HomeVC永远不会被拒绝。在您建议在完成处理程序中演示时,在这种情况下,谁将是新演示的VC的演示者?您的意思是,您正在HomeVC上(或更高级别上,因为它们是演示的)跳舞三个不同的视图控制器。HomeVC负责管理它们。所以,当你关闭一个VC并显示另一个VC时,你可以在几秒钟内看到HomeVC。因此,无论你的行为是适当的。我更愿意说,建议等待一个视图控制器被解除,然后再显示另一个视图控制器。否则,您可能会收到类似“对VCObj开始/结束外观转换的不平衡调用”的警告。建议:你可以在这个过程中显示HUD。Rafal,正如我在最初的问题中提到的,我不再需要PhotopickerVC或CropVC。拉法,正如我在最初的问题中提到的,我不再需要PhotopickerVC或CropVC了。把他们留在身边似乎是浪费。