Tengo un problema que parece que no puedo solucionar. Estoy tratando de tomar una captura de pantalla de un UIScrollView (incluido el contenido fuera de la pantalla), pero cuando la vista es larga, el renderInContext no obtiene todo el contenido de la vista de desplazamiento. Las dimensiones de la imagen producida son correctas, pero parece que los datos renderizados faltan trozos de la pantalla, dejando un espacio en blanco donde deberían estar esos trozos. Los bloques que faltan provienen del contenido de un UIWebView, que creo que está configurado como "scaleToFit". No ocurre siempre, parece que solo ocurre cuando la altura de UIWebView es bastante grande. Lo que me hace pensar que tiene que ver con el escalado de UIWebView.¿Cómo se arreglan los "bloques" de datos faltantes cuando se toman capturas de pantalla en un dispositivo con iOS?
Si ajusto coreLayer.bounds CGRECT a continuación, obtengo resultados diferentes, a veces los bloques faltantes están en la parte inferior y, a veces, están en el centro de la imagen.
Empecé con el código de la respuesta aceptada de esta question y cuando me di cuenta el tema de corte, he modificado a lo siguiente:
UIGraphicsBeginImageContext(scrollView.contentSize);
{
CGPoint savedContentOffset = scrollView.contentOffset;
CGRect savedFrame = scrollView.frame;
//hide the scroll bars
[scrollView setShowsHorizontalScrollIndicator:NO];
[scrollView setShowsVerticalScrollIndicator:NO];
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
//adjust layer for cut-off
CALayer *coreLayer = scrollView.layer;
coreLayer.bounds = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[coreLayer renderInContext: UIGraphicsGetCurrentContext()];
//[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
//reset the scroll bars to default
[scrollView setShowsHorizontalScrollIndicator:YES];
[scrollView setShowsVerticalScrollIndicator:YES];
}
UIGraphicsEndImageContext();
El ajuste de corte ayudó (fijado con algunos puntos de vista) pero aún se está cortando cuando UIScrollView es bastante largo. He estado trabajando en esto por un tiempo y parece que no puedo encontrar una solución. ¿Tienes alguna sugerencia? ¿Alguien ha encontrado este problema?
Por favor ayuda!
Solo un pensamiento, pero ¿ha considerado temporalmente cambiar scrollView.frame.size a scrollView.contentSize? Esto requerirá que la vista de tabla cargue todas las celdas, ya que encajan en el marco (el contenido de la memoria caché de las vistas de tabla está fuera de su marco, no fuera de la pantalla). – Kalle