Я знаю, что я немного опоздал, но я надеюсь, что смогу помочь кому-то еще в поисках ответа.Что касается задаваемых вопросов:
Боюсь, единственный способ добиться лучшего качества изображения - это сделать изображение большего размера и позволить UIImageView
изменить его размер для вас.Я не думаю, что вы можете установить разрешение, но использование большего изображения может быть хорошим выбором.Рендеринг страницы не займет слишком много времени, и изображение будет более качественным.PDF-файлы обрабатываются по требованию в зависимости от уровня масштабирования, поэтому они кажутся «более качественными».
Что касается рендеринга всех страниц, вы можете получить количество страниц вдокумент, вызывающий CGPDFDocumentGetNumberOfPages( pdf )
и использующий простой цикл for
, позволяет объединить все изображения, созданные в одно изображение.Для его отображения используйте UIScrollVIew
.
На мой взгляд, этот подход лучше, чем выше, но вы должны попытаться оптимизировать его, например, рендеринг всегда текущего,предыдущая и следующая страница.Для хороших эффектов перехода с прокруткой, почему бы не использовать горизонтальный UIScrollView
.
Для более общего кода рендеринга я всегда выполняю вращение следующим образом:
int rotation = CGPDFPageGetRotationAngle(page);
CGContextTranslateCTM(context, 0, imageSize.height);//moves up Height
CGContextScaleCTM(context, 1.0, -1.0);//flips horizontally down
CGContextRotateCTM(context, -rotation*M_PI/180);//rotates the pdf
CGRect placement = CGContextGetClipBoundingBox(context);//get the flip's placement
CGContextTranslateCTM(context, placement.origin.x, placement.origin.y);//moves the the correct place
//do all your drawings
CGContextDrawPDFPage(context, page);
//undo the rotations/scaling/translations
CGContextTranslateCTM(context, -placement.origin.x, -placement.origin.y);
CGContextRotateCTM(context, rotation*M_PI/180);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageSize.height);
Steipete уже упоминал, устанавливая белый фон:
CGContextSetRGBFillColor(context, 1, 1, 1, 1);
CGContextFillRect(context, CGRectMake(0, 0, imageSize.width, imageSize.height));
Так что последнее, что нужно иметь в виду, при экспорте изображения, установите качество на максимум.Например:
UIImageJPEGRepresentation(image, 1);