2011-04-10 20 views
5

estoy trabajando con un UIScrollView que se puede utilizar en cualquier orientación y contiene una serie de subvistas:Captura UIScrollView fuera contenido de la pantalla

// in viewDidLoad 

mainScrollView = (UIScrollView *)self.view; 

mainScrollView.contentSize = CGSizeMake(1024, 1432); 

Estoy tratando de capturar una captura de pantalla de toda la vista de desplazamiento con todas sus subvistas, incluso lo que no está visible actualmente en la pantalla. Las siguientes capturas sólo lo que es visible en la pantalla en el momento de la captura:

// make screenshot 

UIGraphicsBeginImageContext(mainScrollView.bounds.size); 

[mainScrollView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *screenImg = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 



// save screenshot in docs dir 

NSData *pngData = UIImagePNGRepresentation(screenImg); 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *documentsDir = [paths objectAtIndex:0]; 

[pngData writeToFile:[documentsDir stringByAppendingPathComponent:@"screen1.png"] 

       options:NSDataWritingAtomic error:nil]; 

Añadiendo lo siguiente antes de hacer la captura de pantalla era la única manera de que pudiera fino que me permitió capturar toda la vista de desplazamiento:

// capture off-screen content 

mainScrollView.frame = CGRectMake(0, 0, 1024, 1432); 

Esta captura es correcta e incluye todas las subvistas. El problema es que una vez que realizo la captura de pantalla, mi vista de desplazamiento deja de responder, por lo que ya no puedo desplazarme (o desplazarme lateralmente si estoy en modo vertical). Si giro el dispositivo, el problema parece rectificarse y puedo desplazarme y desplazarme normalmente. Estoy seguro de que me falta algo muy simple que es necesario para que mi vista de desplazamiento funcione normalmente en línea recta después de tomar la captura de pantalla. ¡Cualquier sugerencia muy apreciada!

+0

Debo añadir, en caso de que sea relevante, que se trata de una aplicación para iPad. – beev

Respuesta

3

El problema es que está configurando el tamaño del marco igual al tamaño del contenido. Cuando el tamaño del marco es igual o mayor al tamaño del contenido, no se puede desplazar. Debe encontrar una forma de identificar cuándo finalizó la captura de pantalla y cambiar el tamaño del marco al tamaño anterior. Entonces:

CGRect oldFrame = mainScrollView.frame; 

// do your logic to screenshot 

mainScrollView.frame = oldFrame; 
+0

Eso lo solucionó. ¡Muchas gracias! – beev

Cuestiones relacionadas