当前位置:  开发笔记 > 编程语言 > 正文

将UIWebView呈现为ImageContext

如何解决《将UIWebView呈现为ImageContext》经验,为你挑选了1个好方法。

我试图捕获UIWebView的内容,包括用户不可见的内容.即整个网页即使用户只看顶部.

环顾四周,我发现捕获UIView的最佳方法是检索其图层并使用renderInContext.

但是,UIWebView似乎正在使用自己的CALayer实现,它的行为更像CATiledLayer,尽管它仍然声称是一个标准的CALayer.当我调用renderInContext时,我只获得网页的一部分,最多940px,而不是整个页面.

有没有人有任何想法如何:迫使UIWebView向下滚动另一个940px(显然远非理想)或告诉任何品种的CALayer支持WebView在我要求时呈现其所有内容.

干杯

编辑:我应该补充说,目前更改webview的框架以适应通过javascript检索的页面的大小.



1> PeakJi..:

我已经发布了一个应用程序(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


@vIceBerg iOS4.x:使用Javascript window.scrollTo(%i,%i); iOS5:UIWebView现在有一个子视图:scrollView,因此您可以使用内容偏移属性滚动它.
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有