Проблема с рендерингом PDF iOS-iPad-Кварц - PullRequest
1 голос
/ 08 апреля 2011

У меня проблема с отображением PDF-файла в UIScroolView.Когда я запускаю свое приложение в ландшафтном режиме, PDF заполняется до границы ширины вида, но не до границы высоты вида.Содержимое PDF отображается на экране, но появляется панель UIScroolView, а под содержимым PDF у меня есть белая область.Но когда я запускаю свое приложение в портретном режиме, у меня не возникает никаких проблем, потому что pdf заполнен до границы представления (ширина и высота).

scroolView имеет следующие свойства:

theScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
theScrollView.contentSize = self.view.bounds.size;

Метод рендеринга в PDF следующий:

- (void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)context{

CGPDFPageRef drawPDFPageRef = NULL;
CGPDFDocumentRef drawPDFDocRef = NULL;

@synchronized(self) // Briefly block main thread
{
    drawPDFDocRef = CGPDFDocumentRetain(_PDFDocRef);
    drawPDFPageRef = CGPDFPageRetain(_PDFPageRef);
}

CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f);
CGContextFillRect(context, CGContextGetClipBoundingBox(context));

if (drawPDFPageRef != NULL) // Render the page into the context
{
    NSLog(@"DRAW LAYER: drawPDFPageRef != NULL ");

    CGFloat boundsHeight = self.bounds.size.height;

    if (CGPDFPageGetRotationAngle(drawPDFPageRef) == 0)
    {
        NSLog(@"DRAW LAYER: CGPDFPageGetRotationAngle(drawPDFPageRef) == 0");
        CGFloat boundsWidth = self.bounds.size.width;

        CGRect cropBoxRect = CGPDFPageGetBoxRect(drawPDFPageRef, kCGPDFCropBox);
        CGRect mediaBoxRect = CGPDFPageGetBoxRect(drawPDFPageRef, kCGPDFMediaBox);
        CGRect effectiveRect = CGRectIntersection(cropBoxRect, mediaBoxRect);

        CGFloat effectiveWidth = effectiveRect.size.width;
        CGFloat effectiveHeight = effectiveRect.size.height;

        CGFloat widthScale = (boundsWidth / effectiveWidth);
        CGFloat heightScale = (boundsHeight / effectiveHeight);

        CGFloat scale = (widthScale < heightScale) ? widthScale : heightScale;

        CGFloat x_offset = ((boundsWidth - (effectiveWidth * scale)) / 2.0f);
        CGFloat y_offset = ((boundsHeight - (effectiveHeight * scale)) / 2.0f);

        y_offset = (boundsHeight - y_offset); // Co-ordinate system adjust

        CGFloat x_translate = (x_offset - effectiveRect.origin.x);
        CGFloat y_translate = (y_offset + effectiveRect.origin.y);

        CGContextTranslateCTM(context, x_translate, y_translate);

        CGContextScaleCTM(context, scale, -scale); // Mirror Y
    }
    else // Use CGPDFPageGetDrawingTransform for pages with rotation (AKA kludge)
    {
        NSLog(@"DRAW LAYER ELSE : CGPDFPageGetRotationAngle(drawPDFPageRef) == 0");

        CGContextTranslateCTM(context, 0.0f, boundsHeight);
        CGContextScaleCTM(context, 1.0f, -1.0f);

        CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(drawPDFPageRef, kCGPDFCropBox, self.bounds, 0, true));
    }

    CGContextDrawPDFPage(context, drawPDFPageRef);
}

CGPDFPageRelease(drawPDFPageRef); // Cleanup
CGPDFDocumentRelease(drawPDFDocRef);}

Большое спасибо !!

1 Ответ

1 голос
/ 08 апреля 2011

Я исправил проблему, добавив

theScrollView.contentSize= self.view.bounds.size

в DidRotateFromInterfaceOrientation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...