В моем коде я пытаюсь показать UIWebView
во время загрузки страницы, а затем, когда это будет сделано, захватить изображение из веб-представления для кеширования и отображения позже (так что мне не нужно перезагружать и отображать веб-страницу ).
У меня есть что-то вроде:
CGContextRef context = CGBitmapContextCreate(…);
[[webView layer] renderInContext:context];
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *image = [UIImage imageWithCGImage:imageRef];
Проблема, с которой я сталкиваюсь, заключается в том, что из-за мозаики UIWebView
иногда только половина страницы отображается в контексте к тому моменту, когда я захватываю изображение.
Есть ли способ обнаружить или заблокировать поток фонового рендеринга UIWebView
, чтобы я мог получить изображение только после того, как весь рендеринг будет завершен?
ОБНОВЛЕНИЕ: возможно, что условия гонки потоков были отвлекающим маневром (во всяком случае из документации неясно, блокирует ли пользовательский уровень UIWebView
или CATiledLayer
в своих фоновых потоках).
Вместо этого это могло быть проблемой аннулирования (несмотря на несколько видов вызовов setNeedsDisplay
как на UIWebView
, так и на его уровне). Изменение границ UIWebView
перед его рендерингом, похоже, устранило проблему «не отрисовывать все».
Я все еще сталкивался с проблемой, когда несколько плиток рисовались в старом масштабе, но двойной вызов renderInContext:
, похоже, смягчил это в достаточной степени.