【发布时间】:2015-11-05 18:09:30
【问题描述】:
我有一个 IOS 应用程序,可以让用户浏览数周的笔记。每周都有一个 UIViewController - 视图控制器之间的滑动和切换由 UIPageViewController 处理。
在启动时,所有视图控制器都使用它们的数据进行初始化。
当用户滑动时,我会像这样抓住一个视图控制器:
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
if let currentPageViewController = viewController as? SinglePageViewController {
let currentIndex = currentPageViewController.index
return self.weeks[currentIndex - 1]
}
return nil
}
该应用程序完美无缺,直到使用了很多周,因此有很多视图控制器。启动时间开始成为一个问题 - 随着时间的推移,这种情况只会变得更糟。
我尝试过在用户滑动时初始化每个视图控制器。像这样:
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
if let currentPageViewController = viewController as? SinglePageViewController {
let currentIndex = currentPageViewController.index
let newVC = SinglePageViewController()
newVC.index = currentIndex - 1
return newVC
}
return nil
}
这种方法很有效,启动时间也很长 - 但是,现在刷卡变得迟缓并且根本不流畅。
谁能建议如何解决这个问题?
【问题讨论】:
-
您可以尝试将其设置为,一旦您的应用程序达到某个点(视图控制器的数量),它就会开始回收旧的视图控制器以显示未来几周的注释。跨度>
-
不要在滑动时初始化视图控制器,而应该在每个方向上初始化一对,而不是只在它们下一个方向初始化。
-
@twist295,你有这方面的例子吗?
-
@pbush25,我也一直在考虑这个问题。但是应该在哪里做呢? - 如果我在“viewControllerBeforeViewController”中创建 3 个新的视图控制器,我怀疑滑动会更加缓慢
-
我没有示例,我只是头脑风暴,抱歉。另一种选择是将所有视图控制器的初始创建放在操作队列中,并让系统在后台线程上处理所有这些,这可能会让您的应用程序更快地打开。但是,随着时间的推移,这种方法或您的原始方法很容易消耗大量内存。多达 52 个视图控制器是很多的。我提到的另一个选项可能是更好的解决方案。
标签: ios swift uiviewcontroller