Мне нужно создать iPad-приложение, которое будет рендерить несколько PDF-файлов (один файл содержит одну страницу).
Каждая страница должна быть прокручиваемой, масштабируемой, и если пользователь нажимает на часть PDF, должен появиться веб-сайт или фотогалерея.
В настоящее время я думаю, что могу сделать это либо с:
A. UIWebView
Прекрасно отображает PDF, прокрутка и масштабирование. Но похоже, что реализовать интерактивные части PDF-файла очень сложно.
- Я не знаю, смогу ли я использовать CGPDFContextSetURLForRect
- Получение сенсорных событий из UIWebView для выполнения чего-то вроде CGPDFContextSetURLForRect, на мой взгляд, выглядит как "довольно плохой" взлом. Смотри: http://github.com/psychs/iphone-samples/blob/master/WebViewTappingHack/Classes/PSWebView.m
B. Кварц
Я нашел несколько ресурсов, описывающих, как отображать 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.
[Abstract]
Мое решение заключалось в рендеринге контента, перехвате касаний к нему, получении координат относительно отображаемого контента, если он выполняется одним касанием, и, наконец, поиске того, что делать из отображения, содержащего интерактивные области в качестве координат, и что делать, если на них нажимали .
[Для 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-экзамена сверху.
Теперь вам нужно будет перевести координаты касания в ваш контент, если он масштабируется / прокручивается. UIWebView НЕ делает этого за вас, в отличие от UIImageView!
Я никогда не мог понять, как получить требуемую информацию (какая часть контента на каком уровне масштабирования) из UIWebView для перевода координат, но из-за изменившихся требований с PDF на PNG мне было все равно, чтобы это работало слишком много.
надеюсь, это поможет.