如何在自定义容器视图控制器中实现交互式转换

时间:2013-10-15 15:18:09

标签: ios uiviewcontroller containers transition interactive

我实现了自己的自定义容器视图控制器,并尝试使其与iOS 7视图控制器转换兼容。我使自定义容器视图控制器符合UIViewControllerContextTransitioning,并在我致电selftransitionDuration:时发送animateTransition:。只要我只使用动画过渡,一切正常。

现在我想让它与交互式过渡一起使用,所以我再次使用startInteractiveTransition:作为参数调用交互控制器的animateTransition:而不是动画控制器的self。但是,如果我使用UIPercentDrivenInteractiveTransition作为交互控制器,它会在我的上下文(这是容器视图控制器本身)上调用_animator方法。当然,我还没有实现私有和无证的这种方法,所以它崩溃了......

我在实施中遗漏了什么? UIPercentDrivenInteractiveTransition仅与Apple类兼容,因为它使用了一些实现魔法(因为它要求所有内容都应该在UIView动画块中)?文档和头文件使我们看起来像我们可以实现自己的容器视图控制器并仍然使用自定义转换,但这是真的还是只是一厢情愿,因为没有人真的会这样做?

如果我不能使用UIPercentDrivenInteractiveTransition,那么交互/动画逻辑到底应该在哪里?在UIViewControllerTransitionCoordinatorContext对象中?在UIViewControllerInteractiveTransitioning对象中(最有可能的是,这个对象是驱动程序......)?或者在UIViewControllerAnimatedTransitioning对象中(这可能是真实动画发生的地方,但这意味着在交互过程中多次调用animateTransition:?或者为交互过渡的每一步添加新方法?)< / p>

编辑:文档说:

  

百分比驱动的交互式转换对象在一个视图控制器的消失和另一个视图控制器的外观之间驱动自定义动画。它依赖于过渡动画师委托 - 一个采用UIViewControllerAnimatorTransitioning协议的自定义对象 - 来设置和执行动画。

没有UIViewControllerAnimatorTransitioning协议。假设它是一个错误,或者在iOS 7开发期间发生的名称更改,它实际上是UIViewControllerAnimatedTransitioning协议,我们如何将交互控制器与动画控制器链接?我想这是驱动转换的视图控制器的责任,但我没有看到任何API来建立这个链接,所以这意味着UIPercentDrivenInteractiveTransition确实是为Apple类保留的吗?

1 个答案:

答案 0 :(得分:0)

我正在尝试自己做同样的事情并最终编写自己的UIPercentDrivenInteractiveTransition等价物。似乎百分比驱动的转换要求动画,并在交互式转换开始后实际启动它。我在取消时实现反向动画时遇到了一些麻烦。