Максимальный размер скриншота (буфер памяти) - PullRequest
4 голосов
/ 14 марта 2012

весь блок кода состоит из следующего:

CGSize layerSize = [webview sizeThatFits:CGSizeZero];

if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f) {
    UIGraphicsBeginImageContextWithOptions(layerSize, NO, 2.0f);
} 
else {
      UIGraphicsBeginImageContext(layerSize);
}

[webview.layer renderInContext:UIGraphicsGetCurrentContext()];

screenshot = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

но после тестирования эта строка вызывает проблему: [webview.layer renderInContext: UIGraphicsGetCurrentContext ()];

похоже на сбой памяти. Существует ли максимальный размер (ширина x высота) в зависимости от устройства (ipod, iphone, ipad), где происходит сбой этой функции - похоже, происходит сбой для очень длинных страниц на дисплее сетчатки?

Ответы [ 3 ]

0 голосов
/ 19 января 2013

Привет, акишнани. У меня возникла та же проблема. После того, как я страдал и гуглил все, я только что узнал, что переопределяю - метод (void)drawRect:(CGRect)rect, и он создает проблему. Это может решить проблему, если она еще не решена.

-(void)drawRect:(CGRect)rect
{    [super drawRect:rect];
}
0 голосов
/ 05 июня 2015

Это довольно старая тема, но найдено ограничение высоты скриншота.

Я указал верхний предел (4000 CGFloat), и если содержание, на которое я должен сделать снимок экрана, превышает это, я обрезаю снимок экрана с верхним пределом.

Это помогло мне уменьшить повторение ошибок памяти.

0 голосов
/ 14 марта 2012

Я не думаю, что проблема с памятью вызывает вашу проблему. Вы должны сделать скриншот с void UIGraphicsBeginImageContextWithOptions(CGSize size,BOOL opaque,CGFloat scale);. Последний параметр, равный 0.0, будет заботиться о проблеме с сетчаткой / без сетчатки.

"Масштабный коэффициент, применяемый к растровому изображению. Если указать значение 0,0, масштабный коэффициент будет установлен на масштабный коэффициент основного экрана устройства." Из документации .

UIGraphicsBeginImageContextWithOptions(webview.bounds.size, YES, 0.0);
[webview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

РЕДАКТИРОВАТЬ: вы говорите, что ваше приложение все еще не работает.

Возможно ли, что вы забыли добавить QuartzCore framework.

Вы также должны импортировать QuartzCore header:

#import <QuartzCore/QuartzCore.h>

из Технические вопросы и ответы QA1703 (Снимок экрана в приложениях UIKit)

...