2

我需要在 iPad 应用程序中显示适度 DOM 密集型 HTML 页面的分页幻灯片。
所有文档都是为 iPad 屏幕量身定做的,因此UIWebViews 内永远不会有任何滚动。

我决定将UIWebViews 放在里面 UIScrollView进行分页。
在所有 Web 视图都呈现了它们的内容之后,它工作得非常好和流畅。

但是,我不能在用户滚动之前等待 20、30 或 50 个 Web 视图加载:这需要几分钟。
我试图预测scrollViewDidScroll处理程序中的滑动并在用户继续滚动时预加载几个下一页

这工作得更好(10 或 150 个 Web 视图之间没有性能差异)。
但是调用处理程序会loadHTMLString导致scrollViewDidScroll滚动失去平滑度

我不在乎是否需要多一秒钟才能显示特定内容UIWebView——我想要的只是滚动流畅且尽快可用,并UIWebView在旅途中懒惰地预加载 s。

我该如何做到这一点?

4

1 回答 1

1

这是一个难题,没有简单/优雅的方法来解决它。

加快滚动速度的一种方法是延迟加载页面,如您在问题中所述。但是,为了确保平滑度,您必须控制加载发生的时间。

因此,假设您首先在初始启动时加载前 5 页。当用户滚动到第 2 页并STOPS时,您开始加载第 6 页。一旦用户再次开始滚动,您就会暂停加载,仅当他们在新页面上停止时才能恢复。在两者之间暂停加载将有助于平滑滚动。此外,请确保尽可能发布数据,因为它会累积并阻碍向下平滑滚动。

另一种选择是让 UIWebViews 仅在用户在页面上停止时才开始加载。所以说我滚动到页面,一旦滚动停止,我就开始加载 HTML。这不像第一个选项那样“漂亮”,但它将确保滚动流畅。

另一种选择是运行并加载所有 HTML 页面富文本。省略所有 DOM 密集型的东西。然后使用此方法抓取那些半加载页面的屏幕截图。当用户停在页面上时,您会一直加载它,包括 DOM 密集型内容。这将让用户感觉他们正在快速滚动加载所有内容。

这是我以前使用过的一个很棒的滚动类。

这是一些帮助方法3的代码。

祝你好运,我希望这会有所帮助!

编辑: LinkedIn 的人发表了一篇很棒的文章,介绍了他们如何解决 webView 滚动问题。值得一读。

于 2012-07-16T18:36:35.283 回答