Ios 在UIViewController之间转换时保持UI元素在适当的位置
我想知道在Ios 在UIViewController之间转换时保持UI元素在适当的位置,ios,uiviewcontroller,Ios,Uiviewcontroller,我想知道在UIViewController之间前进/后退时,保持某些UI元素的最佳实践是什么,例如,如果我使用UINavigationController 具体来说。我正在制作一个具有多个类似视图控制器的应用程序(它们可以是一个主视图控制器的实例)。然后用户点击下一步按钮进入下一页;或者滑回上一页。我在顶部有一个进度条,在底部有一个或多个按钮,我希望在其他内容随着动画变化时保持静态(一个简单的按钮可能会起作用)。 现在我的问题是,是否最好将内容放在容器视图中?或者实现自定义转换以在移动其余项目时
UIViewController
之间前进/后退时,保持某些UI元素的最佳实践是什么,例如,如果我使用UINavigationController
具体来说。我正在制作一个具有多个类似视图控制器的应用程序(它们可以是一个主视图控制器的实例)。然后用户点击下一步按钮进入下一页;或者滑回上一页。我在顶部有一个进度条,在底部有一个或多个按钮,我希望在其他内容随着动画变化时保持静态(一个简单的按钮可能会起作用)。
现在我的问题是,是否最好将内容放在容器视图中?或者实现自定义转换以在移动其余项目时保持这些项目的位置
以下是该概念的图像:
在导航控制器委托中,您可以实现
导航控制器(\uNavigationController:,animationControllerFor:,from:,to:)
以返回自定义UIViewControllerAnimatedTransitioning
对象。如果你走这条路,你将不得不自己实现整个动画
如果您想保持UINavigationController的基本动画,并保持元素稳定,您可以选择另一条路线。在视图控制器中,实现视图将出现:
和/或视图将消失:
。在那里,您可以获得transitionocordinator
并调用animate(连同transition:,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()
}
)
}