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



我实现了自己的自定义容器视图控制器,并尝试使其与iOS 7视图控制器过渡兼容。我使我的自定义容器视图控制器符合UIViewControllerContextTransitioning,并在调用transitionDuration:animateTransition:时发送self。只要我只使用动画过渡,一切都很好。

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

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

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

编辑:文档说:

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

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

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

最新更新