Objective c 在将HTML加载到子UIWebView时,是否可以保持平滑滚动?

Objective c 在将HTML加载到子UIWebView时,是否可以保持平滑滚动?,objective-c,ios,uiwebview,uiscrollview,smooth-scrolling,Objective C,Ios,Uiwebview,Uiscrollview,Smooth Scrolling,我需要在iPad应用程序中显示适度DOM密集型HTML页面的分页幻灯片。 所有文档都是为iPad屏幕量身定做的,因此在UIWebViews中没有任何滚动 我决定将UIWebViews放入UIScrollView中进行分页。 在所有web视图都呈现其内容之后,它工作得非常顺利 然而,我不能等待20、30或50个web视图加载后用户才能滚动:这需要几分钟。 我试图在scrollViewDidScroll处理程序中预测滑动,并在用户不断滚动时预加载下几页 这工作得更好(10个或150个web视图之间没

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

我决定将
UIWebView
s放入
UIScrollView
中进行分页。
在所有web视图都呈现其内容之后,它工作得非常顺利

然而,我不能等待20、30或50个web视图加载后用户才能滚动:这需要几分钟。
我试图在
scrollViewDidScroll
处理程序中预测滑动,并在用户不断滚动时预加载下几页

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

我不在乎显示一个特定的
UIWebView
是否需要一秒钟的时间-我只想让滚动尽快变得平滑和可用,并在移动中懒洋洋地预加载
UIWebView


如何实现这一点?

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

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

假设您在首次发布时加载了前5页。当用户滚动到第2页并停止时,您开始加载第6页。一旦用户再次开始滚动,您将暂停加载,直到用户在新页面上停止时才继续加载。在中间暂停加载将有助于平滑滚动。此外,请确保尽可能释放数据,因为它可能会累积数据并阻碍平滑滚动

另一种选择是,只有当用户停止在页面上时,UIWebView才会开始加载。假设我滚动到第页,一旦滚动停止,我就开始加载HTML。这不像第一个选项那么“漂亮”,但它将确保滚动是平滑的

另一个选项,这是一个有点外,是通过运行和加载所有的HTML页面富文本。忽略所有DOM密集型的内容。然后抓取这些半加载页面的屏幕截图。当用户停在页面上时,您会一直加载它,包括DOM密集型内容。这将让用户感觉他们在加载所有内容后快速滚动

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

编辑:

谢谢您抽出时间。我没有意识到我可以取消加载HTML。我现在就来试试。当用户开始拖动时,我试着调用
stopLoading
,虽然效果明显好转,但距离无缝还很远。当用户在我们认为可以安全加载内容后立即滚动时,问题就会显现出来。滚动事件排队,我们无法知道用户在加载完成之前滚动的意图。嗯,这很烦人:P我不确定我是否理解您评论的最后部分。你能再解释一下吗?对不起,我今天动作太慢了。