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 мне было все равно, чтобы она работала слишком много.
надеюсь это поможет.