我有一个Master自定义容器视图控制器,其目的是在两个不同的视图控制器之间进行交换,每个视图控制器都使用文本字段管理表单。我们将这些FormVC1和FormVC2称为。这两个控制器的视图都由XIB管理。
我可以使用:
在FormVC1和FormVC2之间成功交换 在transitionFromViewController:toViewController:duration:options:animations:completion:
参数传递UIViewAnimationOptionTransitionCrossDissolve
时 options
。
现在我想稍微改变转换,当FormVC1被解雇时,我希望各个文本字段向左飞(一次一个),当FormVC2呈现时,我想要个人文本字段从右侧飞入,一次一个。
我对如何设置这一切以及确切放置特定文本字段动画代码的位置感到困惑。我把它放在Master中的动画块中吗?我是否将它放在每个FormVC的外观回调中?
答案 0 :(得分:0)
您有几个选择,所以选择最适合您的选项:
1)使容器视图控制器包含一个滚动视图,禁用滚动,并禁用滚动条。将两个表单vc设置为容器的子vc,并将视图添加到彼此相邻的scrollview中,因此只有一个可见。在适当的时候,通过将带有动画设置的scrollview的内容偏移设置为YES来显示下一个表单。
2)更好(更容易扩展以添加任意数量的表单),使用UICollectionView而不是基本的scrollview,将其设置为使用水平线性布局,使自定义单元格保存表单vc类(禁用滚动)和滚动条),然后显示下一个表单,scrollToItemAtIndexPath ::应该做的伎俩。
3)最基本的,也许足够好:让您的容器成为导航控制器,只需按下默认转换的形式vc。
所有这些解决方案都假设您的表单vc仅是您想要设置动画的控件,主视图具有透明背景。
答案 1 :(得分:0)
在animations
的{{1}}块中,更改要设置动画的元素的帧。为了让它飞向左边,从transitionFromViewController:toViewController:…
中减去200这样的东西。要让它们从右侧飞入,请从高frame.origin.x
值开始(可能为500)并将其设置为中心。
要按顺序为它们设置动画,您可以为每个元素使用不同的x值。对于更复杂的内容,请使用x
并在前animateWithDuration:delay:options:animations:completion:
块中设置下一个动画。您可以使用它代替completion
。