【发布时间】:2017-12-14 06:20:27
【问题描述】:
我正在尝试创建一个custom container view controller。我想使用标准ViewControllerTransitioning pattern 来动画添加子视图,但我有点卡住了。我完全用代码编写了这个容器视图控制器,因为子视图控制器的数量可能会有所不同。
我已经看过this tutorial,它对我帮助很大,但我无法弄清楚这一步。
添加新的子视图控制器的流程目前是这样的:
'MyContainerVc'.addNewSubViewController
Call UIViewController.addChildViewController
Create transitioning context
Fetch animator
Animate
'Container View'.addSubview
Create autolayout positioning/height constraints
定位/高度约束可以在容器视图中创建(并且是),因为容器视图控制器不需要控制它们,但是宽度约束需要在容器视图控制器中创建,作为子vcs可以为我的容器 vc 指定一个preferredContentSize.width。容器 vc 会尽量尊重子 vcs 的偏好,并尽可能将宽度约束建立在它的基础之上。
我不确定何时可以创建子视图宽度的约束。在执行动画之前需要强制执行约束,因为应在子视图出现之前定义宽度。但是,在将子视图添加为子视图之前我无法激活它,如果我在动画完成后激活它,则在动画期间没有正确定义宽度。
动画师应该只使用容器视图的transitioningContext 和addSubview 方法,因为它应该不知道它正在制作什么样的过渡动画。
另外,在 addSubview 中创建 AutoLayout 约束是最好的方法,或者应该在其他地方完成,例如在didAddSubview?
非常感谢一些建议!
【问题讨论】:
标签: ios animation uiviewcontroller autolayout uicontainerview