iPhone OS 3.2; Рендеринг PDF; Взаимодействие с пользователем

Мне нужно создать iPad-приложение, которое будет рендерить несколько PDF-файлов (один файл содержит одну страницу). Каждая страница должна быть прокручиваемой, масштабируемой, и если пользователь нажимает на часть PDF, должен появиться веб-сайт или фотогалерея.

В настоящее время я думаю, что могу сделать это либо с:

A. UIWebView

Отображает PDF красиво, прокрутка и масштабирование работает. Но, похоже, очень сложно реализовать кликабельные части PDF.

Я не знаю, смогу ли я использовать CGPDFContextSetURLForRectПолучение сенсорных событий из UIWebView для выполнения чего-то вроде CGPDFContextSetURLForRect, на мой взгляд, выглядит как «довольно плохой» взлом. Увидеть:http://github.com/psychs/iphone-samples/blob/master/WebViewTappingHack/Classes/PSWebView.m

Б. Кварц

Я нашел некоторые ресурсы, описывающие, как отображать PDF напрямую через Quartz. Увидеть:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html

Это позволит использовать CGPDFContextSetURLForRectНо я понятия не имею, если это будет - как UIWebView - поддерживать прокрутку и масштабирование из коробки?

Кто-нибудь может просветить меня об этом, пожалуйста?

Спасибо за ваше время!

[Редактировать: изменен с 3,0 до 3,2] [Редактировать: мое "решение"]

Привет!

Я мог бы придумать рабочую реализацию для PNG, но не для PDF.

[Аннотация] Мое решение заключалось в рендеринге контента, перехвате касаний к нему, получении координат относительно отображаемого контента, если это было одно касание, и, наконец, поиск того, что делать из отображения, содержащего интерактивные области в качестве координат, и что делать, если они нажали.

[Для PNG] Реализовать нечто подобное было гораздо более громоздким, чем я мог себе представить ... И реализация, с которой я работал, сильно зависит от контента, который вы хотите отобразить, потому что это работает для UIImageView, но я не мог заставить его работать с UIWebView.

Во-первых, вам нужны UIScrollView и UIImageView для визуализации контента и поддержки прокрутки / масштабирования. Затем вам нужно реализовать некоторую обработку, чтобы получить интересующие вас прикосновения / жесты. См .: developer.apple.com/iphone/library/samplecode/ScrollViewSuite/Listings/1_TapToZoom_Classes_TapDetectingImageView_h.html

Этот образец от Apple предоставляет все необходимое для работы этой части. В качестве бонуса он также заботится о преобразовании координат относительно области просмотра контента, что очень удобно! (иначе вы будете знать только, где происходит нажатие на экран, если только половина контента вам нужна, если ваш контент масштабируемый / прокручиваемый)

[Для PDF] Если вы хотите сделать это с PDF, первое, что вам нужно, это использовать UIWebView (возможно, вы могли бы сделать это через Quartz или что-то еще)

Прикосновение к UIWebView - это настоящая боль! Есть много способов, предлагаемых в Интернете, и, кроме того, никто не сделал то, что он должен делать. После нескольких дней поисков я нашел этот драгоценный камень: cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html

Итак ... создание подклассов UIWebView никуда не приведет, в отличие от UIImageView, и вы должны создать подкласс UIApplicationMain и реализовать его метод для обработки сенсорных событий. Здесь вы можете использовать некоторые из «Touch-Handling-Stuff» из apple-examlpe сверху.

Теперь вам нужно будет перевести координаты касания в ваш контент, если он масштабируется / прокручивается. UIWebView НЕ делает этого для вас, в отличие от UIImageView!

Я никогда не мог понять, как получить требуемую информацию (какая часть контента на каком уровне масштабирования) из UIWebView для перевода координат, но из-за изменившихся требований с PDF на PNG мне было все равно, чтобы она работала слишком много.

надеюсь это поможет.

Ответы на вопрос(1)

Ваш ответ на вопрос