UIPageViewController 和 setViewControllers:

UIPageViewController and setViewControllers:

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

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

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

任何关于这方面的建议都很好,谢谢

Why do we not init all the view controllers first and then pass them all into setViewControllers ?

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

如果您想 "init all the view controllers first",您首先不会使用 UIPageViewController - 您会使用普通的 UIScrollView。但那将是极其重量级的。假设(实际上我的一个应用程序就是这种情况)有两千页。同时拥有两千个视图控制器???你会 运行 在启动时内存不足! UIPageViewController 的全部要点 在于它是轻量级的,因为一般来说,一次只有一个子视图控制器存在。它是动态,而不是静态

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

从那里您可以实现 viewControllerAfterViewController 和 viewControllerBeforeViewController 以提供您希望在用户滑动时显示的任何其他页面。

至于他们为什么这样实现,我想说的是您可以动态选择下一页,因为延迟加载可以带来巨大的 space 好处。