gpt4 book ai didi

iphone - 如何判断 UIWebView 何时完成对上下文的绘制?

转载 作者:行者123 更新时间:2023-12-03 18:48:05 24 4
gpt4 key购买 nike

在我的代码中,我尝试在页面加载时显示 UIWebView ,然后在加载完成后,从 Web View 中捕获图像以缓存并稍后显示(所以我不不必重新加载和渲染网页)。

我有一些类似的东西:

CGContextRef context = CGBitmapContextCreate(…);
[[webView layer] renderInContext:context];

CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *image = [UIImage imageWithCGImage:imageRef];

我遇到的问题是,由于 UIWebView 的平铺,有时在我捕获图像时只有一半页面呈现到上下文中。

有没有办法检测或阻止 UIWebView 的后台渲染线程,以便我只能在所有渲染完成后才能获取图像?

<小时/>

更新:线程竞争条件可能是一个转移注意力的话题(无论如何,从文档中并不清楚 UIWebView 的自定义层还是 CATiledLayer 通常会阻塞其后台线程)。

这可能是一个失效问题(尽管在 UIWebView 及其层上对 setNeedsDisplay 进行了多种调用)。在渲染之前更改 UIWebView 的边界似乎消除了“未绘制整个事物”的问题。

我仍然遇到了一个问题,即以旧比例绘制了一些图 block ,但调用 renderInContext: 两次似乎已经充分缓解了这个问题。

最佳答案

UIWebView 可能正在使用 CATiledLayer 或自定义衍生产品。您也许可以用自己选择的东西替换图层,例如不执行线程绘制的简单 CALayer。在开始加载内容之前替换图层。

如果用标准 CALayer 替换图层不起作用,您可能必须创建自己的子类来模拟 CATiledLayer 的行为,而无需实际进行线程化。

编辑:

来自CATiledLayer.h

/* Note: do not attempt to directly modify the `contents' property of
* an CATiledLayer object - doing so will effectively turn it into a
* regular CALayer. */

因此,您可以在调用 renderInContext:

之前将内容设置为 nil

关于iphone - 如何判断 UIWebView 何时完成对上下文的绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2800224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com