如何在自定义容器视图控制器中实现交互式转换
我实现了自己的自定义容器视图控制器,并试图使其与iOS 7视图控制器转换兼容。 我让我的自定义容器视图控制器符合UIViewControllerContextTransitioning
和我发送self
当我呼吁transitionDuration:
和animateTransition:
只要我只使用animation过渡,这一切都可以正常工作。
现在我想让它与交互式转换一起工作,所以我调用交互控制器的startInteractiveTransition:
而不是animation控制器的animateTransition:
再次使用self
作为参数。 但是,如果我使用UIPercentDrivenInteractiveTransition
作为交互控制器,则会在我的上下文(它是容器视图控制器本身)上调用_animator
方法。 当然,我还没有实现这个私有的和无证的方法,所以它崩溃了…
我在执行中丢失了什么? UIPercentDrivenInteractiveTransition
是否仅与Apple类兼容,因为它使用了一些实现魔法(因为它需要所有东西都应该放在UIView
animation块中)? 文档和头文件看起来像我们可以实现我们自己的容器视图控制器,并仍然使用自定义转换,但这是真的还是只是一厢情愿的想法,因为没有人会真的这样做?
如果我不能使用UIPercentDrivenInteractiveTransition
,那么交互/animation逻辑究竟应该在哪里? 在UIViewControllerTransitionCoordinatorContext
对象? 在UIViewControllerInteractiveTransitioning
对象(最有可能的是,这个对象是驱动程序…)? 或者在UIViewControllerAnimatedTransitioning
对象(这可能是真正的animation应该发生的地方,但是这意味着在交互过程中多次调用animateTransition:
?或者为交互式转换的每一步添加新的方法?)
编辑:文档说:
一个由百分比驱动的交互式转换对象驱动一个视图控制器消失和另一个视图控制器外观之间的自定义animation。 它依赖于一个转换animation代理(一个采用
UIViewControllerAnimatorTransitioning
协议的自定义对象)来设置和执行animation。
没有UIViewControllerAnimatorTransitioning
协议。 假设这是一个错误,或者在iOS 7开发过程中发生了名称变化,实际上是UIViewControllerAnimatedTransitioning
协议,那么我们如何将交互控制器与animation控制器相连? 我想这是视图控制器驱动转换的责任,但我没有看到任何API来做这个链接,所以这将意味着UIPercentDrivenInteractiveTransition
确实为Apple类保留?
我试图自己做同样的事情,最后写了我自己的UIPercentDrivenInteractiveTransition
等价物。 似乎是百分比驱动的转换要求animation,并在交互式转换开始之后实际启动它。 但是在取消的时候,我在实现逆向animation时遇到了一些麻烦。