当前不在屏幕上的 UIWebView 的截图

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

正如 @Mike 所解释的,您需要在网页视图加载完成后调用捕获屏幕函数。 - Malek_Jundi
1个回答

3

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

尝试实现webViewDidFinishLoad:,并在完成后进行呈现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接