¿Cómo captura UIIMAGE de contenidos completos de UITUITVIEW / UIScrollView y lo hace funcionar en un dispositivo iOS

StackOverflow https://stackoverflow.com//questions/10695258

Pregunta

Estoy usando esta pieza de código maravillosamente elegante conseguir unCapturas de pantalla de un UiscrollView, incluidas las piezas de pantalla, para capturar todo el contenido de una vista usable que se exportará a un UIIMAGE.

UIGraphicsBeginImageContextWithOptions(self.controller.tableView.contentSize, YES, 0);
{
    CGPoint savedContentOffset = self.controller.tableView.contentOffset;
    CGRect savedFrame = self.controller.tableView.frame;

    self.controller.tableView.contentOffset = CGPointZero;
    self.controller.tableView.frame = CGRectMake(0, 0, self.controller.tableView.contentSize.width, self.controller.tableView.contentSize.height);

    [self.controller.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();

    self.controller.tableView.contentOffset = savedContentOffset;
    self.controller.tableView.frame = savedFrame;
}

UIGraphicsEndImageContext();

Funciona fantásticamente bien en el simulador, sin embargo, cuando ejecuto este código en un dispositivo iOS (iPhone 4S), obtengo un salto completo de los siguientes errores cuando se llama este método:

[self.controller.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];

Errores:

Error: CGContextTranslateCTM: invalid context 0x2924b0
Error: CGContextDrawImage: invalid context 0x2924b0
Error: CGContextRestoreGState: invalid context 0x2924b0
Error: CGContextSaveGState: invalid context 0x2924b0
Error: CGContextScaleCTM: invalid context 0x2924b0
Error: CGContextClipToRect: invalid context 0x2924b0
etc...

Este código funciona bien cuando la tabla ve el tamaño del contenido está dentro de sus límites, pero tan pronto como sea mayor que sus límites (incluso en 1 píxel), se convierte en un bucle sin fin de los errores anteriores.Pero esto solo sucede en el dispositivo.No es el simulador.

¿Alguna idea?

¿Fue útil?

Solución

Resulta que usar el método [UIIMAGE ..] resizableimagewithcapinsetset] y aplicarlo a la visión de fondo celular y ajustar el marco hace que todo tipo de maldad funky suceda en dispositivos reales pero no en el simulador.

Volver a la espalda a la [uiImage ..] estirableStableImageWithleFTCAPWIDTH: TOPCAPHEIGHT:] MÉTODO SOLUCIÓ.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top