3

UIWebViewを介して表示されるいくつかのページのサムネイルを生成しようとしています。問題は、すべての画像が灰色またはUIWebViewに設定した背景色として表示されることです。ページをロードするのに十分な時間をWebビューに許可していない可能性がありますか?

私は次のことをしたいと思っています。

  1. 画面に表示されないUIWebViewを作成します
  2. グラフィックコンテキストの設定
  3. 各ページについて:
    • WebビューでloadRequestを呼び出します
    • グラフィックスコンテキストでWebビューをレンダリングする
    • スクリーンショットをキャプチャする
  4. グラフィックコンテキストの終了

これが私が単一の画像のために持っているコードです:

UIWebView *screenWebView = _screenshotWebView;
UIView *screenView = _screenshotView;

if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f) {
    UIGraphicsBeginImageContextWithOptions(screenView.bounds.size, NO, 2.0f);
} else {
    UIGraphicsBeginImageContext(screenView.bounds.size);
}

[screenWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:path ofType:@"html"]isDirectory:NO]]];


[screenView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

正しく初期化されていない可能性があると思ったので、XIBファイル内で定義_screenshotWebViewしました。_screenshotView

何かご意見は?ありがとう!

編集:他の誰かがそれを必要とする場合に備えて、この機能を実装するいくつかのコードがあります: https ://github.com/rmcl/webview_screenshot

4

1 に答える 1

3

あなたが理論化したように、UIWebView がページをロードする時間はありません。そのメソッドは非同期的にページの読み込みを開始します。実行ループに戻るまで、UIWebViewおそらく作業を行う機会はありません。

実装webViewDidFinishLoad:を試して、完了後にレンダリングを実行してください。

于 2012-05-21T21:39:24.877 に答える