Jak przechwycić UIImage pełnej zawartości UITableView / UIScrollView i sprawić, że będzie działać na urządzeniu ios

Używam tego cudownie eleganckiego fragmentu koduPobieranie zrzutu ekranu UIScrollView, w tym części poza ekranem przechwycić całą zawartość UITableView, aby zostać wyeksportowanym do 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();

Działa doskonale w symulatorze, jednak kiedy uruchomię ten kod na urządzeniu z systemem iOS (iphone 4s), otrzymuję cały skok następujących błędów, gdy ta metoda jest nazywana:

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

Błędy:

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

Ten kod działa dobrze, gdy rozmiar zawartości widoku tabeli mieści się w granicach, ale gdy tylko przekroczy swoje granice (nawet o 1 piksel), przechodzi w niekończącą się pętlę powyższych błędów. Ale dzieje się to tylko na urządzeniu. Nie symulator.

Jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion