Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在自定义容器视图控制器中实现交互式转换_Ios_Uiviewcontroller_Containers_Transition_Interactive - Fatal编程技术网

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

Ios 如何在自定义容器视图控制器中实现交互式转换,ios,uiviewcontroller,containers,transition,interactive,Ios,Uiviewcontroller,Containers,Transition,Interactive,我实现了自己的自定义容器视图控制器,并尝试使其与iOS 7视图控制器转换兼容。我使我的自定义容器视图控制器符合UIViewControllerContextTransitioning,并在调用transitionDuration:和animateTransition:时发送self。只要我只使用动画过渡,一切都很好 现在我想让它与交互式转换一起工作,所以我再次使用self作为参数调用交互控制器的startinteractivateTransition:,而不是动画控制器的animateTrans

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

现在我想让它与交互式转换一起工作,所以我再次使用
self
作为参数调用交互控制器的
startinteractivateTransition:
,而不是动画控制器的
animateTransition:
。但是,如果我使用
uipercentdriventeractivetransition
作为交互控制器,它会在我的上下文(即容器视图控制器本身)上调用
\u animator
方法。当然,我还没有实现这个私有的、没有文档的方法,所以它崩溃了

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

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

编辑:文档说明:

百分比驱动的交互式过渡对象在一个视图控制器消失和另一个视图控制器出现之间驱动自定义动画。它依赖于一个过渡动画师代理—一个采用
UIViewControllerAnimatorTransitioning
协议来设置和执行动画的自定义对象


没有
UIViewControllerAnimatorTransitioning
协议。假设这是一个错误,或者是在iOS 7开发过程中发生的名称更改,并且实际上是
UIViewControllerAnimatedTransitioning
协议,我们如何将交互控制器与动画控制器链接?我想这是视图控制器驱动转换的责任,但我没有看到任何API来创建此链接,因此,这意味着
uipercentdriventeractivatetransition
确实是为苹果类保留的?

我正试图自己做同样的事情,最后编写了自己的
uipercentdriventeractivatetransition
等效版本。似乎“百分比驱动”转换要求动画,并在交互式转换启动后实际启动动画。取消时,我在执行反向动画时遇到了一些问题。

这也是我最后要做的。对于取消,我播放一个与取消之前已经发生的事情对称的动画。棘手的部分是在容器中重建正确的视图控制器层次结构,并再次调用所有的
willMoveToParentViewController:
系列回调。在我的例子中,它还导致对
beginAppearanceTransition:
/
endAppearanceTransition
的调用不平衡。。。同时,为导航条设置动画与交互式转换并行是另一项工作!根据容器视图控制器的性质,在转换时不必总是调用
willMoveToParentViewController
回调<例如,code>UITabBarController在
viewDidLoad
中进行这些调用,但在更改选项卡时不进行调用。你是如何播放这些对称取消动画的?通过复制层中的所有动画,删除它们,然后重新添加副本?我不知道百分比驱动的交互事务真正起作用的是什么魔法。我实现了自己的交互式转换,根据percentComplete参数移动对象。然后,如果我完成了转换,我将从当前值percentComplete到1开始动画。如果取消转换,我将从当前值percentComplete到0开始动画。没有什么真正的困难,但需要大量的编写。你找到解决方案了吗?我最终从头开始编写了自己的交互式转换,正如下面的其他评论所暗示的,我不使用UIPercentDrivenInteractiveTransition。你能解释一下你是如何使自定义容器与新的iOS7转换API兼容的吗?我现在也在尝试做同样的事情。问题是,我不知道要调用哪些方法,或者要遵循哪些协议来实现这一点。不过,我对“常见”用例(presentViewController、自定义navigationController转换)的API本身非常熟悉。我自己想出来的。其实很简单。谢谢你的帖子:)