通过在后台线程 - iPhone上呈现UIWebView来创建UIImage

Gil*_*ert 9 iphone uiwebview calayer cgcontext ios

有人知道如何获取从UIWebView呈现的UIImage的方式或创意吗?问题是,必须在后台线程上.

我会详细说明:我试图每秒从多个UIWebView获取图像+ - 并将其显示在屏幕上(当然是iPhone).因为将图层渲染到CGContext是一个CPU消耗作业,我不想使用主线程,所以不要挂起UI.

我到目前为止的尝试是:

  • 我试图renderInContext在webView的图层上使用UIGraphicalContext,但_WebTryThreadLock错误导致网页浏览崩溃.

  • 我尝试创建一个CGBitmapContext,并将webview的图层渲染到它,但得到了相同的结果.

  • 我尝试实现一个copy方法(通过添加一个类别)CALayer,深度复制所有的公共属性和子图层.之后,我尝试renderInContext了我复制的图层.我得到了一个部分 "正确" 的UIImage - 意思是,并非所有的图层都被渲染,所以例如,我只会得到网站标题(或页脚,或正文,或搜索栏,或只是一些框架).UIWebview的图层由所有类型的子类CALayers组成,因此这可能就是为什么这个接近不起作用的原因.

  • 我尝试kCATransactionDisableActions在a中设置CATransaction,但它似乎没有改变这种行为(它们都没有).

我非常接近放弃.

你们中间有救世主吗?

lxt*_*lxt 4

UIWebView 讨厌,我的意思是真的讨厌,在后台线程上对其进行任何操作。UIKit 不是完全线程安全的。绘制到图形上下文(这是在 iOS 4 中添加的),但不在辅助线程上创建 UIView。

您是否在主线程之外创建 UIWebView?您也许有一些代码可以分享吗?我怀疑您的问题是由于您尝试在辅助线程上对 UIWebView 执行操作而引起的。将视图内容呈现为图像的绘制操作可以在主线程之外进行,但创建视图本身则不能。

  • 我正在主线程上创建 UIWebViews。我非常同意“讨厌”部分;),而且我也同意绘制到图形上下文是可能的,但不幸的是,渲染 UIWebView 布局似乎在某些条件下锁定了与UIWebView 本身(不是主线程,而是 iOS 创建来处理它的线程),这会导致当辅助线程完成锁定时它会崩溃。UIWebView 布局是使用 CALayer 的一些私有 API 子类(WebLayer 等)构建的。 (3认同)