Wie erfasse ich UIImage des vollständigen Inhalts von UITableView / UIScrollView und lasse es auf einem iOS-Gerät funktionieren

Ich benutze diesen wunderbar eleganten CodeErhalten eines Screenshots einer UIScrollView, einschließlich Offscreen-Teilen Erfassen des gesamten Inhalts einer UITableView, die in ein UIImage exportiert werden soll.

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();

Es funktioniert fantastisch gut im Simulator, aber wenn ich diesen Code auf einem iOS-Gerät (iphone 4s) laufen lasse, bekomme ich einen ganzen Satz der folgenden Fehler, wenn diese Methode aufgerufen wird:

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

Fehler:

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...

Dieser Code funktioniert gut, wenn die Größe des Inhalts der Tabellenansichten innerhalb seiner Grenzen liegt. Sobald er jedoch größer als seine Grenzen ist (sogar um 1 Pixel), tritt eine Endlosschleife der oben genannten Fehler auf. Dies geschieht jedoch nur auf dem Gerät. Nicht der Simulator.

Irgendwelche Ideen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage