【问题标题】:UIPageViewController and setViewControllers:UIPageViewController 和 setViewControllers:
【发布时间】:2015-08-08 10:03:12
【问题描述】:

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

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

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

任何关于此的指针都会很棒,谢谢

【问题讨论】:

    标签: ios objective-c uipageviewcontroller


    【解决方案1】:

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

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

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

    【讨论】:

    • 同时显示两个页面,这是在 iPad 应用程序而不是 iPhone 上使用的东西吗?谢谢您的回答。不知道它是一个数组,因为您可以显示两个页面或一个页面。
    • 当您希望它看起来更像一本打开的书时。想象一个阅读应用程序,您想一次显示两个页面。
    【解决方案2】:

    setViewControllers 方法可以认为是设置当前页面。文档告诉您根据给定设置一次显示多少页面,将一定数量的 viewController 传递给此方法。

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

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

    【讨论】:

    • 嘿乔丹!只是为了确保我做对了, UIPageViewController 是否延迟加载?不是一次加载整个VC吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多