2015-09-25 123 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。完成後,一次性關閉整個視圖控制器層次結構。

相關問題