ScreenShot的UIWebView当前不在屏幕上

时间:2012-05-21 20:33:39

标签: ios uikit uiimage screenshot

我正在尝试生成将通过UIWebView显示的多个页面的缩略图。问题是所有图像都是灰色或我为UIWebView设置的背景颜色。可能是因为我不允许Web视图有足够的时间加载页面吗?

我相信我想做以下事情:

  1. 创建一个在屏幕上不可见的UIWebView
  2. 设置图形上下文
  3. 每页:
    • 在网络视图上调用loadRequest
    • 在图形上下文中渲染网页视图
    • 捕捉截图
  4. 结束图形上下文
  5. 以下是我对单张图片的代码:

    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

1 个答案:

答案 0 :(得分:3)

正如您所理论的那样,UIWebView没有时间加载页面。该方法将异步启动页面加载;在您返回运行循环之前,UIWebView可能无法完成任何工作。

尝试implementing webViewDidFinishLoad:并在完成后进行渲染。