UIViewControllerTransitioningDelegate和UIViewControllerContextTransitioning之间的区别

时间:2015-12-30 09:53:07

标签: ios uiviewcontroller

我想实现自定义ViewController转换。 那里有很多解决方案。其中大多数都基于UIViewControllerContextTransitioningUIViewControllerTransitioningDelegate

因为他们主要做同样的事, 这些方法之间有什么区别? (为什么Apple为了同一目的而为我们提供了两个API?)

谢谢!

2 个答案:

答案 0 :(得分:1)

你怎么能说他们也一样,你真的读过这份文件吗?显然,他们不...... 它们在某种程度上与转换相关,对于这一点来说还可以,但是出于不同的原因你需要两者!

基本上,UIViewControllerTransitioningDelegate允许您指定哪些对象负责哪些转换 - 例如,您可以使用transitionDelegate的{​​{1}}来说明“是否有推送转换,然后UIViewController(或任何其他对象,它可能是你的ViewController)负责过渡“

完成此操作后,MyPushTransitioner - 顾名思义 - 只是一个Context对象。它在转换期间由您的动画对象(实现UIViewControllerContextTransitioningUIViewControllerAnimatorTransitioning)使用。

此上下文对象使您可以访问viewControllers的视图,您可以操作,动画,...并使用它来报告转换进度(例如:您执行帧和不透明度的动画,然后告诉转换上下文完成...)

修改

这是另一个SO帖子,我提供了一些关于这些API如何工作的提示 - > IOS 7 Weather APP Like Transition/Animations

答案 1 :(得分:0)

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewControllerTransitioningDelegate_protocol

  

实现UIViewControllerTransitioningDelegate的对象   协议出售用于管理固定长度或   视图控制器之间的交互过渡什么时候想   使用自定义模式表示类型set来呈现视图控制器   它的modalTransitionStyle属性为UIModalPresentationCustom和   将符合此协议的对象分配给它   transitioningDelegate属性。当您呈现该视图控制器时,   UIKit会在您的转换委托中查询要使用的对象   将视图控制器设置为动画。

<强> https://developer.apple.com/library/tvos/documentation/UIKit/Reference/UIViewControllerContextTransitioning_protocol/index.html

  

UIViewControllerContextTransitioning协议的方法提供   视图之间的过渡动​​画的上下文信息   控制器。不要在自己的课程中采用这个协议,也不要   你应该直接创建采用这个协议的对象吗?期间   过渡,参与过渡的动画师对象接收到   来自UIKit的完全配置的上下文对象。自定义动画师   对象 - 采用UIViewControllerAnimatorTransitioning的对象   或UIViewControllerInteractiveTransitioning协议 - 应该简单   从提供的对象中检索所需的信息。