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?