UIWebView加载HTML时如何避免闪烁

时间:2014-01-03 17:31:17

标签: ios iphone objective-c ipad uiwebview

我有一个包含标签栏的原生iOS应用。每个选项卡的视图控制器都包含一个UIWebView。当用户在选项卡之间切换时,我在相应的Web视图中加载HTML。 HTML完全缓存在设备上。以下是我将HTML提供给UIWebView的方法:

[self.webView loadHTMLString:htmlString baseURL:baseUrl];

baseUrl是指向所有资产所在目录的文件URL。

这在在线和离线模式下效果很好,但是UIWebView需要时间来解析和呈现HTML。结果,当在标签之间切换时,用户看到白色背景的短暂闪烁。我想删除它,因为用户能够告诉UI不是本机的(本机UI立即呈现)。

我正在考虑在完成HTML渲染并将其缓存在内存中之后获取UIWebView的屏幕截图。用户下次导航到该Web视图时,应用程序会在UIWebView在后台呈现HTML时显示屏幕截图。最后,该应用程序使用实际的UIWebView交换屏幕截图并获取新的屏幕截图。这与Google Chrome应用的工作方式类似。

有没有人知道这个问题的更好解决方案?

2 个答案:

答案 0 :(得分:0)

取决于您如何呈现该网络视图。我从你的描述中不确定你是怎么做到的,但是既然你正在谈论一眨眼的白色背景,我会假设你有一个带有加载html的web视图的情况然后你把它切换到另一个HTML。该案例的解决方案是:

  • 创建第二个Web视图,
  • 将新的html加载到这个新的Web视图
  • 当该Web视图完成加载html(您可以查看是否使用UIWebViewDelegate)时,您可以使用旧的Web视图快速切换它(这意味着您最终将新的Web视图添加到视图层次结构中,而不是在此时你创造了它。)。

这样你就可以在旧的和新的html之间进行即时切换,但是用户将会等待,你决定如何处理它。例如,您可以使用UIActivityIndi​​catorView。

答案 1 :(得分:0)

webViewDidFinishLoad:被调用时,您可以执行任意数量的操作,使Web视图可见,删除您在webview上的内容等等...