我试图捕获UIWebView的内容,包括用户不可见的内容.即整个网页即使用户只看顶部.
环顾四周,我发现捕获UIView的最佳方法是检索其图层并使用renderInContext.
但是,UIWebView似乎正在使用自己的CALayer实现,它的行为更像CATiledLayer,尽管它仍然声称是一个标准的CALayer.当我调用renderInContext时,我只获得网页的一部分,最多940px,而不是整个页面.
有没有人有任何想法如何:迫使UIWebView向下滚动另一个940px(显然远非理想)或告诉任何品种的CALayer支持WebView在我要求时呈现其所有内容.
干杯
编辑:我应该补充说,目前更改webview的框架以适应通过javascript检索的页面的大小.
我已经发布了一个应用程序(Web2Pic),请相信我UIGraphicsBeginImageContext(webView.frame.size); 除了从我们的UIWebView中的可见区域获取一个小图像之外什么都不做;-(
正确的方法有点复杂,但它只是有效:
1. 在我们的UIWebView中使用JavaScript来获取这些浮点值:
//Whole page size in HTML coordinate document.body.scrollWidth document.body.scrollHeight //UIWebView visible size in HTML coordinate window.innerWidth window.innerHeight
2.现在我们可以将整个页面"剪切"成几十个UIWebView大小的小块.然后我们可以单独捕获每个小块并将它们保存到我们的缓存中.我通过计算页面偏移量并使用UIGraphicsBeginImageContext(webView.frame.size)来实现这一点; 获得一系列图像.此外,您应该将图像阵列缓存到文件系统中,否则应用程序最终会崩溃!
3.当我们最终得到所有小块时,我们可以启动一个全分辨率的上下文:UIGraphicsBeginImageContext(CGSizeMake(document.body.scrollWidth,document.body.scrollHeight));
4.Render每个小图像都根据坐标进入大背景.并且要小心角落,每行/每行中的最后一幅图像可能不是完整图像.
5.还有一步:保存大图像.不要将其保存到PhotoAlbum中,因为iOS会自动降低相册中图像的分辨率.相反,我们可以将其保存到文件系统中并启用应用程序的iTunes文件共享支持,甚至可以编写一个简单的应用内照片管理器.
希望这些可以帮助;-)
Yichao Peak Ji