複数のViewControllerで使用するアプリケーションがありますUIWebViews
。はUIWebViews
ローカルで生成されたhtmlをレンダリングするために使用され、低速のネットワークアクセスは必要ありません。
メモリを節約するために、viewcontrollerviewWillAppear
コールバックによってプロンプトが表示されたときにオンデマンドでのみこれらをロードします。(そして、メッセージに応答してオフスクリーンインスタンスをアンロードしdidReceiveMemoryWarning
ます。)
問題は、ユーザーがHTMLがレンダリングされているのを見ることができることです。これには、スタイリングのフラッシュやその他の不快なアーティファクトが伴う場合があります。むしろ、レンダリングを画面外で行い、準備ができたら完全にレンダリングされたビューを表示したいと思います。
viewWillAppear
UIWebViewが完全にレンダリングされるまで、戻ってこないようにすることができるのは非常に整然としています。しかし、どのように?
UIWebView
メッセージを送信して、何をレンダリングするかを指示しloadHTMLString:baseURL:
ます。これは非同期であり、しばらくして(すぐに)WebviewのデリゲートがコールバックされますwebViewDidFinishLoad
。
、またはviewWillAppear
のいずれかを実行して、内部でrunloopを実行してみました。これはシミュレーターで機能します(ログに文句を言いますNSDefaultRunLoopMode
UITrackingRunLoopMode
[CATransaction同期]トランザクション内で呼び出されます
ただし、機能します)が、デバイスではデッドロックが発生し、webViewDidFinishLoad
呼び出されることはありません。
(また、UIWebView
loadingプロパティが機能していないようです。少なくとも、呼び出した後loadHTMLString:baseURL:
、コールバックを取得する前は、正しくありません。)