将HTML加载到子UIWebView时,我可以保持平滑滚动吗?

时间:2012-07-16 15:57:16

标签: objective-c ios uiwebview uiscrollview smooth-scrolling

我需要在iPad应用程序中显示中等DOM密集型HTML页面的分页幻灯片 所有文档都是针对iPad屏幕定制的,因此UIWebView内部永远不会滚动。

我决定将UIWebView放在UIScrollView内进行分页 在所有网络视图都呈现其内容后,它的工作非常顺利。

但是,在用户可以滚动之前,我无法等待20,30或50个Web视图加载:它需要几分钟。
我尝试在scrollViewDidScroll处理程序中预测滑动,并且在用户继续滚动时预加载几个下一页。

这样做效果更好(10或150个网页浏览量之间没有性能差异) 但是,loadHTMLString处理程序中调用scrollViewDidScroll会导致滚动失去平滑性

我不在乎是否需要花费一秒时间来显示特定的UIWebView - 我想要的只是让滚动变得平滑且尽快可用,并且懒得预加载UIWebView s在旅途中。

我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

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

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

所以说你开始在首次发布时加载前5页。当用户滚动到第2页并 STOPS 时,您开始加载第6页。一旦用户再次开始滚动,您只需暂停加载,以便在新页面停止时恢复。暂停其间的加载将有助于平滑滚动。此外,请确保在可能的情况下释放数据,因为它可能会累积并阻碍平滑向下滚动。

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

另一个选项,这个有点在那里,是贯穿并加载所有HTML页面的富文本。省去所有DOM密集型的东西。然后抓住那些半载页面using this method的屏幕截图。当用户在页面上停止时,您将一直加载它,包括DOM密集型内容。这将让用户感觉他们正在快速滚动所有加载的内容。

Here is a great scrolling class that I have used before.

Here is some code to help with method 3.

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

编辑: Here is a great post from the guys at LinkedIn on how they solved webView scrolling problems. It would be worth a read.