Как исправить недостающие «блоки» данных при создании снимков экрана на устройстве iOS? - PullRequest
5 голосов
/ 03 апреля 2012

У меня проблема, которую я не могу решить. Я пытаюсь сделать снимок экрана UIScrollView (включая содержимое вне экрана), но при длинном представлении renderInContext не получает все содержимое представления прокрутки. Размеры полученного изображения правильные, но в отображаемых данных отсутствуют фрагменты дисплея, оставляя пустое пространство там, где должны быть эти фрагменты. Недостающие блоки взяты из контента в UIWebView, который, как я считаю, установлен как «scaleToFit». Это происходит не каждый раз, а только тогда, когда высота UIWebView достаточно велика. Это заставляет меня думать, что это связано с масштабированием UIWebView.

Если я настраиваю coreLayer.bounds CGRECT ниже, я получаю разные результаты, иногда недостающие блоки находятся внизу, а иногда - посередине изображения.

Я начал с кода из принятого ответа на этот вопрос и, когда заметил проблему отсечки, я изменил ее следующим образом:

UIGraphicsBeginImageContext(scrollView.contentSize);
{
    CGPoint savedContentOffset = scrollView.contentOffset;
    CGRect savedFrame = scrollView.frame;


    //hide the scroll bars
    [scrollView setShowsHorizontalScrollIndicator:NO];
    [scrollView setShowsVerticalScrollIndicator:NO];


    scrollView.contentOffset = CGPointZero;
    scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
    //adjust layer for cut-off
    CALayer *coreLayer = scrollView.layer;
    coreLayer.bounds = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
    [coreLayer renderInContext: UIGraphicsGetCurrentContext()]; 
    //[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();

    scrollView.contentOffset = savedContentOffset;
    scrollView.frame = savedFrame;


    //reset the scroll bars to default
    [scrollView setShowsHorizontalScrollIndicator:YES];
    [scrollView setShowsVerticalScrollIndicator:YES];
}
UIGraphicsEndImageContext();

Корректировка обрезки помогла (исправила ее в некоторых видах), но она все еще обрезается, когда UIScrollView довольно длинный. Я работал над этим некоторое время и не могу найти решение. У вас есть какие-нибудь предложения? Кто-нибудь когда-нибудь сталкивался с этой проблемой?

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 11 сентября 2012

Является ли ваш вид прокрутки представлением таблицы?Если это так, то из-за повторного использования ячеек фактически существует только экранный контент.Даже если это обычный просмотр с прокруткой, вполне вероятно, что ОС оптимизирует работу, не отображая некоторые неэкранные элементы представления прокрутки.Если это так, вы можете добиться того, чтобы это сработало, программно прокручивая по одному экрану за раз и переводя каждый из них в ваш контекст в правильной позиции.

...