В моем коде я пытаюсь показать 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:
дважды, похоже, достаточно смягчил эту проблему.