- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
有人知道一种方法,或者对如何获取从 UIWebView 呈现的 UIImage 有创意吗?问题是,它必须在后台线程上。
我会详细说明:我试图每秒从多个 UIWebViews 获取图像+-,并将其显示在屏幕上(当然是 iPhone)。因为将图层渲染到 CGContext 是一项耗费 CPU 的工作,所以我不想使用主线程,所以不会挂起 UI。
到目前为止我的尝试是:
我尝试在 UIGraphicalContext
的 webView 层上使用 renderInContext
,但是 _WebTryThreadLock
错误导致 webview 崩溃。
我尝试创建一个 CGBitmapContext
,并将 webview 的图层渲染到它,但得到了相同的结果。
我尝试对CALayer
实现copy
方法(通过添加类别),深度复制所有公共(public)属性和子层。之后,我尝试 renderInContext
我复制的图层。我得到了一个 部分“正确”的 UIImage - 意思是,并不是所有的层都被渲染了,所以例如,我只会得到网站页眉(或页脚,或正文,或搜索栏,或者只是一些框架)。 UIWebview 的层由各种子类 CALayer 组成,所以这可能就是这种方法不起作用的原因。
我尝试在 CATransaction
中设置 kCATransactionDisableActions
,但它似乎并没有改变这种行为(两者都没有)。
我快要放弃了。
你们中间有救星吗?
最佳答案
UIWebView 讨厌,我的意思是真的讨厌,在后台线程上对它做任何事情。 UIKit 不是完全线程安全的。绘制到图形上下文是(这是在 iOS 4 中添加的),但不是在辅助线程上创建 UIView。
您是在主线程之外创建 UIWebView 吗?你可能有一些代码要分享吗?我怀疑您的问题是由于您试图在辅助线程上对 UIWebView 执行操作而引起的。将 View 内容呈现为图像的绘制操作可以发生在主线程之外,但创建 View 本身不能。
关于iphone - 通过在后台线程上渲染 UIWebView 创建 UIImage - iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660999/
我是一名优秀的程序员,十分优秀!