我有一個應用程序在幾個視圖控制器中使用UIWebViews
。 UIWebViews
用於呈現本地生成的html,不需要慢速網絡訪問。延期viewWillAppear,直到webViewDidFinishLoad
爲了節省內存,我只根據視圖控制器viewWillAppear
回調的提示加載這些內存。 (並卸載屏幕外實例以響應didReceiveMemoryWarning
消息。)
問題是用戶看到正在呈現的html,有時伴隨着樣式和其他各種令人不快的工件的閃爍。我更願意在屏幕外完成渲染,並在準備就緒時展示完全渲染的視圖。
在UIWebView完全呈現之前,能夠讓viewWillAppear
不返回將會非常整齊。但是如何?
我通過發送loadHTMLString:baseURL:
消息告訴UIWebView
要呈現什麼。這是異步的,一段時間(不久)webview的委託被回叫webViewDidFinishLoad
。
我嘗試在viewWillAppear
內運行runloop,運行NSDefaultRunLoopMode
或UITrackingRunLoopMode
。這部作品在模擬器(它抱怨到日誌
[CATransaction同步]稱爲事務
內,但不工作),但在設備上它死鎖,與webViewDidFinishLoad
從來沒有被調用。
(此外,它似乎像UIWebView
裝載屬性不起作用。我打電話loadHTMLString:baseURL:
和獲取回調之前這不是真的,至少,後)。
「加載」屬性確實有效,但只有當UIWebView在屏幕上時(如果您跟蹤`webViewDidStartLoad`和`webViewDidFinishLoad`),纔會實際觸發加載。技巧傾向於說:「將其添加到屏幕的不透明度爲0.01」,但這對於不在屏幕上的視圖控制器沒有幫助...... – 2013-05-29 19:20:51