在我的代码中,我试图将 a 显示UIWebView
为正在加载的页面,然后,完成后,从 Web 视图中捕获图像以缓存并稍后显示(因此我不必重新加载和呈现网页) .
我有一些类似的东西:
CGContextRef context = CGBitmapContextCreate(…);
[[webView layer] renderInContext:context];
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *image = [UIImage imageWithCGImage:imageRef];
我遇到的问题是,由于UIWebView
's 平铺,有时在我捕获图像时只有一半的页面呈现到上下文中。
有没有办法检测或阻止UIWebView
的后台渲染线程,以便只有在所有渲染完成后才能获取图像?
更新:线程竞争条件可能是一个红鲱鱼(从文档中不清楚,无论如何,是UIWebView
自定义层还是CATiledLayer
后台线程上的一般块)。
相反,这可能是一个失效问题(尽管setNeedsDisplay
在 theUIWebView
及其层上都有多种调用)。在渲染之前更改边界UIWebView
似乎已经消除了“不绘制整个事物”的问题。
我仍然遇到了一个问题,即以旧比例绘制了一些瓷砖,但调用renderInContext:
两次似乎已经充分缓解了这一问题。