有没有人知道如何获取从UIWebView渲染的UIImage的方法,或者有创意的想法?问题是必须在后台线程上完成。
我来详细说明一下:我试图每秒从多个UIWebView中获取图像,并在屏幕上显示它(当然是iPhone)。由于将层渲染到CGContext是一个占用CPU资源的任务,我不想使用主线程,以免挂起UI。
到目前为止,我的尝试有:
- 我尝试在webView的层上使用renderInContext到UIGraphicalContext,但是_WebTryThreadLock错误会导致webview崩溃。 - 我尝试创建一个CGBitmapContext,并将webview的层渲染到其中,但得到了相同的结果。 - 我尝试实现一个copy方法(通过添加类别)到CALayer,深复制所有公共属性和子层。之后,我尝试渲染我复制的层。我得到了一个部分“正确”的UIImage——也就是说,并没有渲染所有的层,因此例如只获得网站标题(或页脚、正文、搜索栏或仅一些帧)。UIWebview的层包括各种子类化的CALayer,所以这可能就是为什么这种方法不起作用的原因。 - 我尝试在CATransaction中设置kCATransactionDisableActions,但似乎并没有改变这种行为(两者都没有)。
我几乎要放弃了。有没有人能帮忙解决?
我来详细说明一下:我试图每秒从多个UIWebView中获取图像,并在屏幕上显示它(当然是iPhone)。由于将层渲染到CGContext是一个占用CPU资源的任务,我不想使用主线程,以免挂起UI。
到目前为止,我的尝试有:
- 我尝试在webView的层上使用renderInContext到UIGraphicalContext,但是_WebTryThreadLock错误会导致webview崩溃。 - 我尝试创建一个CGBitmapContext,并将webview的层渲染到其中,但得到了相同的结果。 - 我尝试实现一个copy方法(通过添加类别)到CALayer,深复制所有公共属性和子层。之后,我尝试渲染我复制的层。我得到了一个部分“正确”的UIImage——也就是说,并没有渲染所有的层,因此例如只获得网站标题(或页脚、正文、搜索栏或仅一些帧)。UIWebview的层包括各种子类化的CALayer,所以这可能就是为什么这种方法不起作用的原因。 - 我尝试在CATransaction中设置kCATransactionDisableActions,但似乎并没有改变这种行为(两者都没有)。
我几乎要放弃了。有没有人能帮忙解决?