我实现了自己的自定义容器视图控制器,并尝试使其与 iOS 7 视图控制器转换兼容。我使我的自定义容器视图控制器符合并在我调用和时UIViewControllerContextTransitioning
发送。只要我只使用动画过渡,这一切都可以正常工作。self
transitionDuration:
animateTransition:
现在我想让它与交互式转换一起工作,所以我调用交互控制器startInteractiveTransition:
而不是动画控制器animateTransition:
,self
再次用作参数。但是,如果我使用 a作为交互控制器,它会在我的上下文(即容器视图控制器本身)上UIPercentDrivenInteractiveTransition
调用一个方法。_animator
当然,我还没有实现这个私有且无证的方法,所以它崩溃了......
我在实施中遗漏了什么吗?仅与 Apple 类兼容,UIPercentDrivenInteractiveTransition
因为它使用了一些实现魔法(如它要求所有内容都应位于UIView
动画块中)?文档和头文件使我们看起来可以实现自己的容器视图控制器并且仍然使用自定义转换,但这是真的还是只是一厢情愿,因为实际上没有人会这样做?
如果我不能使用UIPercentDrivenInteractiveTransition
,那么交互/动画逻辑到底应该在哪里?在UIViewControllerTransitionCoordinatorContext
对象?在UIViewControllerInteractiveTransitioning
对象中(很可能,这个对象是驱动程序......)?或者在UIViewControllerAnimatedTransitioning
对象中(这可能是真正的动画应该发生的地方,但这是否意味着animateTransition:
在交互过程中多次调用?或者为交互过渡的每个步骤添加新方法?)
编辑:文档说:
百分比驱动的交互式过渡对象在一个视图控制器的消失和另一个视图控制器的出现之间驱动自定义动画。它依赖于一个过渡动画代理——一个采用协议的自定义对象
UIViewControllerAnimatorTransitioning
——来设置和执行动画。
没有UIViewControllerAnimatorTransitioning
协议。假设是一个错误,或者是在 iOS 7 开发过程中发生的名称更改,实际上是UIViewControllerAnimatedTransitioning
协议,我们如何将交互控制器与动画控制器联系起来?我想这是驱动转换的视图控制器的责任,但我没有看到任何 API 来建立这个链接,所以这意味着它UIPercentDrivenInteractiveTransition
确实是为 Apple 类保留的?