21

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

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

该协议似乎UIViewControllerInteractiveTransitioning提供了我想要的一些东西(交互性、自定义转换)。但是因为转换是单独调用的,presentViewController:animated:而且dismissViewControllerAnimated:它似乎是专门为基于堆栈的导航(即UINavigationControllerUITabBarController模态表示)而构建的。即,它似乎不会与UIPageViewController.

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

4

1 回答 1

4

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

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

以下是我将如何去做:

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

  2. 创建您的其他视图控制器;让我们称它们为 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];
    
    ....
    
  3. 在每个 ViewXController 中设置一个 UIPanGestureRecognizer,它的目标和选择器设置为父视图控制器 (MainViewController)。

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

于 2015-04-17T05:50:16.417 回答