UIPageViewController和setViewControllers:

时间:2015-05-26 15:59:35

标签: ios objective-c uipageviewcontroller

在设置UIPageViewController时,我无法理解这行代码:

  [self.pageViewController setViewControllers:@[startingViewController]
                                      direction:UIPageViewControllerNavigationDirectionForward
                                       animated:NO
                                     completion:^(BOOL finished) {
                                         // Completion code
                                     }];

在大多数示例中,我看到只有一个UIViewController被传递到setViewControllers,然后下一个使用(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController启动。为什么我们不首先初始化所有视图控制器,然后将它们全部传递到setViewControllers?

对此的任何指示都会很棒,谢谢

2 个答案:

答案 0 :(得分:7)

  

为什么我们不首先初始化所有视图控制器,然后将它们全部传递给setViewControllers?

因为这不是UIPageViewController的工作方式。它在每个时刻都有一次一页或一次两页(显示同时,就像一本打开的实体书)。大多数人一次使用它来显示一个页面,因此当您致电setViewControllers:时,您将提供该页面。

如果你想“首先初始化所有视图控制器”,你首先不会使用UIPageViewController - 你将使用普通的UIScrollView。但那将是非常重量级的。假设(实际上是我的一个应用程序中的情况)有两千页。两个视图控制器一下子???你在启动时会耗尽内存! UIPageViewController的整个 point 是轻量级的,因为一般来说,一次只存在一个子视图控制器。它是动态,而不是静态

答案 1 :(得分:1)

setViewControllers方法可以被认为是设置当前页面。该文档告诉您将一定数量的viewControllers传递给此方法,具体取决于使用给定设置一次显示的页数。

enter image description here

从那里你可以实现vi​​ewControllerAfterViewController和viewControllerBeforeViewController,以便在用户滑动时提供你想要显示的任何其他页面。

至于为什么他们这样实现它,我会说你可以动态选择下一页,因为延迟加载可以带来巨大的空间效益。