2015-09-17 37 views
3

我想知道在UIViewController之間前進/後退時,如果我使用UINavigationController,保留某些UI元素的最佳做法是什麼。在UIViewControllers之間轉換時保留UI元素

具體說明。我正在製作一個具有多個類似視圖控制器的應用程序(它們可以是一個主視圖控制器的實例)。然後用戶點擊下一個按鈕進入下一頁;或向後滑動以轉到上一頁。我在頂部有一個進度條,底部有一個或多個按鈕,我希望保持靜態,而其餘內容正在使用動畫進行更改(可能需要簡單的推送)。 現在我的問題是,如果最好將內容放在容器視圖內?或實施自定義過渡以保持這些物品到位,同時移動剩餘物品?

這裏是概念的圖像:

www.dropbox.com/s/izavmhbkihkiyiy/question.png?dl=0

回答

2

在導航控制器委託可以實現navigationController(_ navigationController:, animationControllerFor:, from:, to:)以返回自定義UIViewControllerAnimatedTransitioning對象。如果你走這條路線,你將不得不自己實現整個動畫。

如果你想保持來自UINavigationController的基本動畫,並保持你的元素穩定,你可以去另一條路線。在你的視圖控制器中執行viewWillAppear:和/或viewWillDisappear:。在那裏你可以得到transitionCoordinator並且在那上面叫animate(alongsideTransition:, completion:)。通過該功能,您可以與系統提供的動畫並行運行自定義動畫。

要保留固定的元素,您可以將固定元素的另一個副本添加到容器視圖中,您可以從傳遞到塊的上下文對象中獲取該元素。在完成塊中,您可以再次移除它。

聽起來很複雜,但如果你看一下代碼,它實際上是相當簡單:

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    let fixedViewCopy = UIView(...) 
    fixedViewCopy.frame = self.fixedView.frame 

    transitionCoordinator?.animate(
    alongsideTransition: { context in 
     context.containerView.addSubview(fixedViewCopy) 
    }, 
    completion: { _ in 
     fixedViewCopy.removeFromSuperview() 
    } 
) 
} 
相關問題