预加载UIPageViewController的页面

Eri*_*ric 13 iphone ios uipageviewcontroller

我找不到一个很好的解决方案让UIPageViewController预加载周围的ViewControllers.

现在发生的事情是当用户开始翻页时,没有任何反应,代码调用

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
Run Code Online (Sandbox Code Playgroud)

一旦它加载然后它就会显示动画.这需要太长时间并且不顺畅.

有人有解决方案吗?

Dav*_*d H 19

创建一个可变容器,当你显示第一个视图时,创建两个viewController,如果用户页面需要它,一旦你有viewController对象请求它的视图(让它加载nib并调用控制器的"viewDidLoad") :"方法.您需要找出一个识别viewControlers的系统,以便您可以检索所需的viewController.您可以在dispatch_queue的块中执行繁重的工作.

从那时起,当用户页面时,您首先在容器中查看viewController,如果找不到,则必须实时进行.

您可能希望使用dispatch_group,以便在分页之前等待挂起块完成.

每次用户页面时,您都会查看该页面周围的页面是否在容器中.您还可以预先获取更多viewControllers - 就像显示的每个页面上的两个前向两个反向一样.

  • +1"请求它的观点."这就是我所需要的. (4认同)
  • 我基本上实现了这个,并且我有要求控制器视图(调用viewdidload)的调用,但是从用户开始滚动和显示控制器时它仍然有很大的延迟.好像它没有真正加载,只是部分 (2认同)
  • @BenPackard大多数人不理解的是,如果UI正在显示 - 它有一个窗口属性 - 所有更改必须在主线程上完成.但是,如果您只是构建或加载UI元素,并且未显示,则通常可以安全地从笔尖加载或以其他方式填充它.您可以创建一个新的串行队列并将其与后台线程关联,并在设置视图后使用新创建和配置的视图将块发布到主线程.您可以在Apple网站和此处找到关于GCD,调度队列等的大量信息. (2认同)