在導航控制器委託可以實現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()
}
)
}