【发布时间】:2013-10-23 11:27:28
【问题描述】:
我实现了自己的自定义容器视图控制器,并尝试使其与 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 类保留的?
【问题讨论】:
-
您找到解决方案了吗?
-
我最终从头开始编写自己的交互式过渡,正如下面其他 cmets 所暗示的那样,我不使用 UIPercentDrivenInteractiveTransition。
-
您能解释一下您是如何使您的自定义容器与新的 iOS7 过渡 API 兼容的吗?我目前正在尝试做同样的事情。问题是,我不知道要调用哪些方法或遵循哪些协议才能完成这项工作。不过,我对“常见”用例(presentViewController、自定义 navigationController 转换)的 API 本身非常熟悉。
-
没关系。我自己想通了。实际上这很容易。谢谢你的帖子:)
标签: ios uiviewcontroller containers transition interactive