在没有动画的情况下解除视图控制器之后立即显示视图控制器

时间:2015-09-25 22:43:04

标签: ios iphone swift presentviewcontroller

我在屏幕上显示了UIImagePickerController。当我选择照片时,我需要关闭PickerController,然后立即显示另一个PhotoEditController。这是我的代码

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

在解除旧VC和呈现新VC之间有一个0.1秒的闪存,因此显示了presentViewController(self)。如何在一个优雅的解决方案中避免这种情况而不是通过它来破解它?感谢

3 个答案:

答案 0 :(得分:1)

标准的实现方法是用动画关闭第一个视图控制器(VC)并用动画显示第二个VC。

但是,根据您的视图层次结构,您还可以先加载第二个VC,然后在其上面显示第一个VC。有了这个简单地解雇没有动画的第一个VC应该在第二个VC下面显示没有延迟。

第三种方法,正如LLooggaann建议的那样,不要忽视第一个VC而只是提出第二个VC。完成后,一次性关闭整个视图控制器层次结构。

答案 1 :(得分:0)

您可以实例化PhotoEditController的实例,然后执行以下操作:

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

虽然看起来有点像黑客

答案 2 :(得分:0)

这很可能是因为解除被发送到呈现选择器的VC并且在尝试呈现本身的父VC之后解除了选择器模态vc并执行完成处理程序。 一个解决方案是创建自己的过渡类,你基本上可以复制粘贴来自here的代码来做那个