質問

私はいくつかのビューコントローラでUIWebViewsを使用するアプリケーションを持っています。 UIWebViewsは何の低速なネットワークアクセスを必要としない、ローカルで生成されたHTMLをレンダリングするために使用されます。

のViewController viewWillAppearコールバックによって促さとして、私は唯一のオンデマンドでこれらを読み込むメモリを節約するために。 (とメッセージをdidReceiveMemoryWarningに応じてオフスクリーンのインスタンスをアンロードします。)

問題は、ユーザーが時々スタイリングやその他の各種不快なアーティファクトの点滅を伴って、HTMLがレンダリングされている見ることを得ることです。私はむしろレンダリングがオフスクリーン行われ、完全にレンダリングされたビューを明らかにすることだろうというときにその準備ができています。

のUIWebViewが完全にレンダリングされるまで戻りませviewWillAppearを持つことができるのは非常に整頓だろう。しかし、どのように?

私はそれをUIWebViewメッセージを送信することにより、レンダリングする何loadHTMLString:baseURL:を教えてください。これは非同期であり、そしていくつかの時間は、(すぐに)、後のWebViewのデリゲートはwebViewDidFinishLoadバック呼び出されます。

私は、viewWillAppear内部実行ループを実行しているNSDefaultRunLoopModeUITrackingRunLoopModeのいずれかを実行して実験を行いました。これは、シミュレータで動作します(それがログに文句

  

[CATransactionの同期]トランザクション内で呼び出されます。

が、仕事をして)それが呼び出されることはありませんされます。

webViewDidFinishLoadと、デッドロックデバイス上

は、(また、それはプロパティが動作しませんUIWebViewロードのように思える。私はloadHTMLString:baseURL:と、それは真実ではないコールバックを取得する前に呼び出す。少なくとも、後に。)

正しい解決策はありません

他のヒント

ソリューションの多くは、ここで私は思います。迅速な1はYESに設定され、それが非表示のプロパティを使用してのUIWebViewをロードすることです。そして、UIWebViewsデリゲートとしてあなたのUIViewControllerを設定し、実装します:

- (void)webViewDidFinishLoad:(UIWebView *)webView

あなたがNOに戻ってプロパティを設定するところます。

注意すべき事は、あなたが囲まれている場合は/埋め込まれたコンテンツをwebViewDidFinishLoadが複数回発生しますということです。だから、これを追跡する必要があります。あなたがローカルコンテンツをロードしている場合、実際に問題になることはありません。

私は最善のmonowerkerのソリューションを好きですが、別の解決策は、(ビューコントローラよりも、いくつかのより恒久的なオブジェクトで)すでにレンダリングのUIWebViewの上のすべての時間を保持することです。 monowerkerのソリューションの表情があまりにも破壊的である場合、私はそれを行うと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top