UIPageViewController 与 UIViewControllerInteractiveTransitioning

Posted

技术标签:

【中文标题】UIPageViewController 与 UIViewControllerInteractiveTransitioning【英文标题】:UIPageViewController vs UIViewControllerInteractiveTransitioning 【发布时间】:2013-09-25 16:20:57 【问题描述】:

简单的问题,我已经围绕UIViewControllers 之间的自定义导航/转换进行了大量探索,但不清楚以下几点:

我正在寻找类似于UIPageViewController 提供的行为(通过内容的“页面”向前和向后的非基于堆栈的导航)。但我希望能够自定义转换,并且我希望转换可以交互链接到自定义UIPanGestureRecognizer

似乎UIViewControllerInteractiveTransitioning 协议提供了我想要的一些东西(交互性、自定义转换)。但是因为转换仅使用presentViewController:animated:dismissViewControllerAnimated: 调用,所以它似乎专门用于基于堆栈的导航(即UINavigationControllerUITabBarController、模态演示)。即,它似乎不会与UIPageViewController 之类的东西配合得很好。

如果我使用UIViewController 容器来构建类似于UIPageViewController 的自定义容器(请参阅正在进行的演示here),我可以将UIViewControllerInteractiveTransitioning 协议集成到其中以驱动转换吗?还是我需要自己滚动这些(目前我有一个粗略的手动实现交互式过渡)?

【问题讨论】:

不是这个问题的确切答案,但我做过一个类似的项目,你可以参考源代码。它使用滑动手势而不是平移手势,但您可以轻松修改源以使其平移。在下面的链接中查看它; github.com/surajthomask/SlidePanelsView 【参考方案1】:

我在我的应用程序中做了很多自定义动画,大多数开发人员都回避这些动画,因为我在工作中使用了很多 UIViewControlloer Containment。

这是获得所需转换的最简单方法。

下面是我的做法:

    创建基础视图控制器;让我们称之为 MainViewController。它将引用所有其他视图控制器并保存转换的逻辑。它还应该遵循我们将定义为 ViewXControllerDelegate 的协议。

    创建您的其他视图控制器;让我们称它们为 View1Controller、View2Controller、View3Controller。添加它们每个的实例作为 MainViewController 的私有属性。在 MainViewController 的 init 方法中,实例化它们并将它们的视图添加为 MainViewController 视图的子视图。应该看起来像这样:

    self.v1c = [[View1Controller alloc]init];
    [self addChildViewController:self.v1c];
    [self.v1c didMoveToParentViewController:self];
    
    //Setup each subview so that its frame makes it off screen or
    //On screen depending on the app state and where you want each
    //subview to animate to/from
    
    [self.view addSubview:self.v1c.view];
    
    ....
    

    在您的每个 ViewXController 中设置一个 UIPanGestureRecognizer,其目标和选择器设置为父视图控制器 (MainViewController)。

    处理 MainViewController 类中的所有逻辑,在这些逻辑中,您会考虑滑动距离、应用程序状态、每个视图的位置(使用 ViewXController 中的辅助属性,如动画所在的“inactiveFrame”或“activeFrame”)它们之间的发生取决于平移手势中发生的移动百分比。

【讨论】:

如果我有一个实例(或子类)UIPercentDrivenInteractiveTransition 和一个完全实现的动画师(类符合UIViewControllerAnimatedTransitioning 协议)我如何确切地把这两者在我的自定义容器视图控制器中一起上课。假设容器控制器正确实现了所有视图包含逻辑。我认为这也是 OP 的原始问题(即“如何”集成。)您的回答只是描述了我所拥有的设置,但对所有集成部分都进行了手动操作。

以上是关于UIPageViewController 与 UIViewControllerInteractiveTransitioning的主要内容,如果未能解决你的问题,请参考以下文章

添加专用 UI​​ViewController(例如 Monotouch 中的 UIPageViewController)的正确方法是啥?

UIPageViewController -presentationCount 不触发

如何更改 UIPageViewController 中的按钮名称

iOS6 自动旋转 - UIPageViewController

如何在 UIPageViewController 中重用相同的 ViewController?

更改 UIPageViewController 中显示的初始视图控制器