2015-09-25 252 views
2

我有一个UIImagePickerController显示在屏幕上。当我选择照片时,我需要关闭PickerController,然后立即显示另一个PhotoEditController。这里是我的代码当前视图控制器关闭视图控制器后没有动画

picker.dismissViewControllerAnimated(false, completion: { 
    self.presentViewController(editPhotoVC, animated: false, completion: nil) 
}) 

有解聘老VC,并提出新的VC所以显示的presentingViewController(个体经营)之间的0.1秒的闪光。我如何避免这种优雅的解决方案而不是黑客入侵?由于

+2

既然你没有动画的任何东西,为什么不直接展示视图控制器而不关闭前一个呢? '如果您连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在视图控制器上的较低视图控制器上调用此方法将取消其直接子视图控制器以及堆栈上该子视图之上的所有视图控制器。当发生这种情况时,只有最顶级的观点才会以动画形式被解雇;任何中间视图控制器都会从堆栈中简单地移除。“ – LLooggaann

+0

如何? Apple不允许 – imObjCSwifting

+0

对不起,我在说的是在已经呈现的视图控制器(拾取器)上呈现您的新视图控制器。然后,如果你想全部消除它们,请退出展示第一个视图的原始视图控制器。 – LLooggaann

回答

0

那么你可以PhotoEditController的实例,然后做这样的事情:

instance.willMoveToParentViewController(controllerThatPresentsPicker) 
controllerThatPresentsPicker.addChildViewController(instance) 
controllerThatPresentsPicker.view.insertSubview(instance.view, belowSubview: picker.view) 
instance.didMoveToParentViewController(controllerThatPresentsPicker) 

它看起来有点像,虽然

0

一个黑客工具,很可能是因为解雇发送到VC说提出了选择器,它会取消选择器模态vc,并在尝试呈现其本身的父VC之后执行完成处理程序。 一个解决方案将创建您自己的转换类,您可以基本上复制粘贴代码here来做到这一点

1

标准的实施方法是关闭第一个视图控制器(VC)的动画和第二个VC动画。

但是,根据您的视图层次结构,您也可以先载入第二个VC,然后在其上呈现第一个VC。有了这个简单地解散第一个没有动画的VC,就可以毫不拖延地显示第二个VC。

正如LLooggaann所建议的,第三种方法不排除第一个VC并简单地提供第二个VC。完成后,一次性关闭整个视图控制器层次结构。

相关问题