Как мне получить UIImage полного содержимого UITableView / UIScrollView и заставить его работать на устройстве IOS

Я использую этот удивительно элегантный кусок кодаПолучение скриншота UIScrollView, включая части экрана захватить все содержимое UITableView для экспорта в 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();

Он прекрасно работает в симуляторе, однако, когда я запускаю этот код на устройстве iOS (iphone 4s), я получаю полный скачок следующих ошибок при вызове этого метода:

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

Errors:

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

Этот код хорошо работает, когда размер содержимого табличных представлений находится в пределах его границ, но как только он превышает его границы (даже на 1 пиксель), он попадает в бесконечный цикл вышеуказанных ошибок. Но это происходит только на устройстве. Не симулятор.

Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос