【问题标题】:ScreenShot of an UIWebView that is not currently on screen当前不在屏幕上的 UIWebView 的屏幕截图
【发布时间】:2012-05-21 20:33:39
【问题描述】:

我正在尝试生成将通过 UIWebView 显示的几个页面的缩略图。问题是所有图像都显示为灰色或我为 UIWebView 设置的背景颜色。难道是我没有让网络视图有足够的时间来加载页面?

我相信我想做以下事情:

  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

【问题讨论】:

  • 正如@Mike 所解释的,您需要在网络视图加载完成后调用捕获屏幕功能。

标签: ios uikit uiimage screenshot


【解决方案1】:

正如您所推测的,UIWebView 没有时间加载页面。该方法将异步启动页面加载; UIWebView 在您返回运行循环之前可能没有机会做任何工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多