PDF-Scrollview - показать PDF - документ в альбомном формате - PullRequest
0 голосов
/ 04 сентября 2011

Я использую пример Apple «PDFScrollView» для отображения PDF-файлов на iPad. Это прекрасно работает, пока PDF-документ находится в портретном режиме. Когда документ находится в альбомном режиме, документ всегда отображается повернутым на 90 градусов. Я нашел это Как определить ориентацию документа PDF в iPhone SDK - но когда я пытаюсь получить размеры PDF, высота всегда больше ширины, независимо от ориентации PDF ...

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

Как уже упоминалось, CGPDFPageGetBoxRect(page, kCGPDFMediaBox) всегда возвращает один и тот же размер для PDF, независимо от его ориентации.

Но поворот страницы возвращается правильно.

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

rotate =  CGPDFPageGetRotationAngle(page);

И затем использую код, который я нашел здесь: http://ipdfdev.com/2011/03/23/display-a-pdf-page-on-the-iphone-and-ipad/

switch (rotate) {
        case 0:
            // Translate the origin of the coordinate system at the 
            // bottom left corner of the page rectangle.
            CGContextTranslateCTM(context, 0, cropBox.size.height);
            // Reverse the Y axis to grow from bottom to top.
            CGContextScaleCTM(context, 1, -1);
            break;
        case 90:
            // Reverse the Y axis to grow from bottom to top.
            CGContextScaleCTM(context, 1, -1);
            // Rotate the coordinate system.
            CGContextRotateCTM(context, -M_PI / 2);
            break;
        case 180:
        case -180:
            // Reverse the Y axis to grow from bottom to top.
            CGContextScaleCTM(context, 1, -1);
            // Translate the origin of the coordinate system at the 
            // top right corner of the page rectangle.
            CGContextTranslateCTM(context, cropBox.size.width, 0);
            // Rotate the coordinate system with 180 degrees.
            CGContextRotateCTM(context, M_PI);
            break;
        case 270:
        case -90:
            // Translate the origin of the coordinate system at the 
            // bottom right corner of the page rectangle.
            CGContextTranslateCTM(context, cropBox.size.height, cropBox.size.width);
            // Rotate the coordinate system.
            CGContextRotateCTM(context, M_PI / 2);
            // Reverse the X axis.
            CGContextScaleCTM(context, -1, 1);
            break;
    }

Et voilà - PDF отображается вправильная ориентация

1 голос
/ 04 сентября 2011

Есть ли особая причина, по которой вы рисуете PDF-файлы самостоятельно?Вы можете использовать QLPreviewController на iOS 4.0 или более поздней версии и UIDocumentInteractionController для предыдущих версий.

1 голос
/ 04 сентября 2011

Я пишу это с предположением, что ваша проблема связана с поворотом документа, когда пользователь поворачивает устройство .... Для этого вам нужно перерисовать документ в поле зрения.Чтобы добиться этого, выполните следующие действия.

  1. измените фрейм представления, в котором нарисован документ, и используйте CALayer (ИЛИ CATiledLayer) в этом представлении в следующем методе.- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

  2. Вызвать метод setNeedsDisplay CATiledLayer после смены кадра.

  3. Затем вернуть YES в - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation.

Вышеуказанные шаги будут перерисовывать документ в новом фрейме вашего просмотра соответственно, чтобы он отображался правильно.

-> ЕСЛИ ваше представление в полноэкранном режиме или тогда будет достаточно только шага 2 и 3.

Опубликуйте здесь, если потребуется какая-либо дополнительная помощь ....

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