我应该如何快速实现连续滚动页面?
Posted
技术标签:
【中文标题】我应该如何快速实现连续滚动页面?【英文标题】:How should i implement continuous scrolling through pages in swift? 【发布时间】:2021-04-07 00:32:09 【问题描述】:你能给我一些建议吗?这几天我一直在挣扎。
我的目标是实现连续滚动以显示文档中的页面。每个页面都由一个 viewController 控制。并且用户应该能够放大和缩小。 我应该使用scrollView 还是collectionView 从头开始?哪个更好,内存效率更高?
或者有什么现成的解决方案? (我在 Github 中搜索但没有成功,UIPageViewController 是绝对不是解决方案,因为它不允许连续滚动并且只显示整个页面)
非常感谢
图片: example continuous scrolling
【问题讨论】:
【参考方案1】:集合视图非常适合连续滚动,并有效利用内存。 (单元格被回收。)如果滚动区域的总内容太多而无法放入内存,您将希望在每个页面滚动到视图时将其加载到内存中,并在滚动关闭时释放它。 (也许让您的模型存储每个页面内容的文件 URL,并将页面内容保存到单元格中。)
至于缩放,最好的方法取决于你的意思。如果内容是 PDF 等矢量内容,您可以在用户滚动时简单地重新渲染矢量图像。如果内容是非常高分辨率的图像,您可能需要创建一个mipmapped tiled rendering 框架,或者使用其他人的。我之前写过我自己的 mipmapped 平铺渲染框架。这是可行的,但工作量很大。
(您将原始的巨大图像分成较小的方形图块。然后将原始图像以 50% 的比例渲染成图块并保存,然后是 25%,然后是 12.5%,依此类推,直到您到达单个图像填满屏幕的大小。)
【讨论】:
谢谢,我正在尝试先实现 UICollectionView。我试图将 ViewController 添加到这样的单元格中:在 cellForItemAt:self.addChild(viewControllerForPage) viewControllerForPage.view.frame = cell.bounds cell.contentView.addSubview(viewControllerForPage.view) drawingViewController.didMove(toParent: self) return cell
中,然后出现错误:“由于未捕获的异常 'CALayerInvalidGeometry' 而终止应用程序,原因:'CALayer 位置包含 NaN”不知道我是什么'我做错了,但至少我可以连续滚动单元格
发布一个以该特定问题为主题的新问题,并包含指向重现崩溃的示例项目的链接。很难查看 SO 注释中的代码并找出问题所在。以上是关于我应该如何快速实现连续滚动页面?的主要内容,如果未能解决你的问题,请参考以下文章
当scrollview快速滚动时如何滚动collectionView?