私のコードではUIWebView
、ページが読み込まれているときに表示しようとしています。それが完了したら、Web ビューから画像をキャプチャしてキャッシュし、後で表示します (そのため、Web ページをリロードしてレンダリングする必要はありません)。 .
私は次のようなものを持っています:
CGContextRef context = CGBitmapContextCreate(…);
[[webView layer] renderInContext:context];
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *image = [UIImage imageWithCGImage:imageRef];
私が直面している問題は、UIWebView
のタイリングが原因で、画像をキャプチャするまでにページの半分しかコンテキストにレンダリングされないことがあります。
UIWebView
すべてのレンダリングが終了した後にのみ画像を取得できるように、 のバックグラウンド レンダリング スレッドを検出またはブロックする方法はありますか?
更新:スレッドの競合状態がレッドニシンだった可能性があります (いずれにせよ、UIWebView
カスタム レイヤーなのか、CATiledLayer
バックグラウンド スレッドの一般的なブロックなのか、ドキュメントからは不明です)。
これは、代わりに無効化の問題である可能性があります (とそのレイヤーsetNeedsDisplay
の両方でのいくつかの種類の呼び出しにもかかわらず)。UIWebView
レンダリングする前に の境界を変更するとUIWebView
、「全体が描画されない」という問題が解消されたようです。
いくつかのタイルが古いスケールで描画されているという問題にまだ遭遇しましたが、renderInContext:
2 回呼び出すことで十分に軽減されたようです。