我应该如何快速实现连续滚动页面?

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 注释中的代码并找出问题所在。

以上是关于我应该如何快速实现连续滚动页面?的主要内容,如果未能解决你的问题,请参考以下文章

swift - 如何在多个页面中快速缩放图像

如何快速关闭当前网页?

当scrollview快速滚动时如何滚动collectionView?

jsp提交后,短时间内没切换页面,则样才能禁止用户连续点击提交按钮。。。

iOS:滚动视图在屏幕外显示页面控件

如何快速获取当前链接?后面的内容,location.search页面滚动