UIPageViewController 与 UIViewControllerInteractiveTransitioning
Posted
技术标签:
【中文标题】UIPageViewController 与 UIViewControllerInteractiveTransitioning【英文标题】:UIPageViewController vs UIViewControllerInteractiveTransitioning 【发布时间】:2013-09-25 16:20:57 【问题描述】:简单的问题,我已经围绕UIViewController
s 之间的自定义导航/转换进行了大量探索,但不清楚以下几点:
我正在寻找类似于UIPageViewController
提供的行为(通过内容的“页面”向前和向后的非基于堆栈的导航)。但我希望能够自定义转换,并且我希望转换可以交互链接到自定义UIPanGestureRecognizer
。
似乎UIViewControllerInteractiveTransitioning
协议提供了我想要的一些东西(交互性、自定义转换)。但是因为转换仅使用presentViewController:animated:
和dismissViewControllerAnimated:
调用,所以它似乎专门用于基于堆栈的导航(即UINavigationController
、UITabBarController
、模态演示)。即,它似乎不会与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的主要内容,如果未能解决你的问题,请参考以下文章
添加专用 UIViewController(例如 Monotouch 中的 UIPageViewController)的正确方法是啥?
UIPageViewController -presentationCount 不触发
如何更改 UIPageViewController 中的按钮名称
iOS6 自动旋转 - UIPageViewController