У меня проблема, которую я не могу решить. Я пытаюсь сделать снимок экрана 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 довольно длинный. Я работал над этим некоторое время и не могу найти решение. У вас есть какие-нибудь предложения? Кто-нибудь когда-нибудь сталкивался с этой проблемой?
Пожалуйста, помогите!