【发布时间】:2014-03-15 06:36:14
【问题描述】:
我目前正在尝试构建自己的自定义 ContainerViewController。
我对 iOS ViewController 包含 API(在 iOS 5 中引入)和新的 iOS7 ViewController Transition API 非常熟悉。
在实现我的容器时,我尝试使用 UINavigationController 和 UITabBarController 正在使用的相同模式。
到目前为止,我的 Container 运行良好,并且可以正确使用动画和交互式过渡。
问题是,我将大量逻辑打包到我的 UIViewController 容器子类中。它符合 <UIViewControllerContextTransitioning> 并使用 iVars 存储该协议的方法返回的所有值。
动画和交互逻辑已经在另一个类中分离,第三方也可以使用类似于UINavigationControllerDelegate 和UITabBarControllerDelegate 的委托提供自己的过渡。
我现在要做的是将UIViewControllerContextTransitioning 外包给一个单独的类,以创建与Apple 为其容器VC 所做的相同的模块化。
Apple 为传递给UIViewControllerAnimatedTransitioning 和UIViewControllerInteractiveTransitioning 方法的id<UIViewControllerContextTransitioning> 对象提供了UIViewControllerOneToOneTransitionContext(私有API)。所以他们没有为此使用他们的 UIViewController 子类。 (这就是我现在所做的)
到目前为止,我目前的结构很诱人,因为当转换逻辑在上下文中调用 [updateInteractiveTransition:]、[completeTransition:] 等时,这些调用直接在我的 containerController 上进行,然后可以通过更新其他响应来响应它认为的元素。 (就像 UINavigationController 在您调用 [updateInteractiveTransition:] 时所做的那样,它正在更新 NavigationBar 的内容(交叉淡入淡出)。
在另一个类中外包上下文转换逻辑意味着:
- 提供视图控制器和框架等,它们保存在我的容器的堆栈中,从容器到上下文对象,因为上下文需要将它们提供给转换逻辑。
- 从容器上的上下文对象调用转换回调,因为上下文对象是从转换逻辑接收它们的对象。
由于 Apple 使用这种类关系,我想它一定有一些优势。 目前,我不知道是否应该保留我的实现,或者尝试使其像 Apple 提供的容器一样模块化。
另请参阅SO - Question 我问了同样的事情。 (更像是一个答案问题,对此感到抱歉:/)
当我们讨论这个话题时:是否可以让我的容器与 UIPercentDrivenInteractiveTransition 一起使用?文档说它会在关键帧中剪切由 transitionAnimator 执行的动画,并逐步自动“重播”动画过渡,所以我怀疑它是否可以与自定义容器一起使用。
感谢您的帮助!
【问题讨论】:
标签: ios objective-c ios7 uiviewcontroller uicontainerview