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