M.A*_*ash 17 objective-c ios uipageviewcontroller swift
我需要一种方法来使UIPageViewController重用控制器以节省内存,因为我有大量的页面要显示!我做了UIPageViewController的基本实现,但无法设法使控制器可重用,请咨询!
The*_*heo 11
在我当前的项目解决这个问题,我缓存被作为页面创建的所有视图控制器UIPageViewController中Set.每当UIPageViewController从其数据源请求新的视图控制器时,我通过检查parentViewController属性来过滤掉该缓存中未使用的视图; 如果没有未使用的视图控制器,则创建一个新的视图控制器.
我UIPageViewController和缓存的设置看起来类似于:
class MyPageViewController: UIPageViewController {
private var reusableViewControllers = Set<MyViewController>()
init() {
super.init(/* ... */)
self.dataSource = self
let initialViewController = self.unusedViewController()
// Configure the initial view controller
// ...
self.setViewControllers([ initialViewController ],
direction: .Forward,
animated: false,
completion: nil)
}
// This function returns an unused view controller from the cache
// or creates and returns a new one
private func unusedViewController() -> MyViewController {
let unusedViewControllers = reusableViewControllers.filter { $0.parentViewController == nil }
if let someUnusedViewController = unusedViewControllers.last {
return someUnusedViewController
} else {
let newViewController = MyViewController()
reusableViewControllers.insert(newViewController)
return newViewController
}
}
}
Run Code Online (Sandbox Code Playgroud)
数据源使用相同的函数来获取未使用的视图控制器:
extension MyPageViewController: UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let nextViewController = unusedViewController()
// Configure the next view controller for display
// ...
return nextViewController
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以使用ACReuseQueue来实现您想要的。它提供了一个用于重用视图控制器的队列。您可以使用 UIPageViewController 数据源方法将 VC 从重用队列中出列。棘手的部分是知道何时将它们放回重用队列中。UIPageViewController 没有提供任何方法来知道何时发生这种情况,但有一种方法。UIPageViewController 是一个容器 VC,它使用 VC 包含 API 添加和删除其子视图控制器。如果从 UIPageViewController 中删除,您的 VC 将收到 didMoveToParentViewController: 并以 nil 作为参数。使用此方法将您自己添加回队列。
| 归档时间: |
|
| 查看次数: |
2990 次 |
| 最近记录: |