iPhone OS 3.2; Renderização em PDF; Interação com o usuário

Eu precisaria criar um aplicativo para iPad que renderizasse vários arquivos PDF (um arquivo contém uma página). Cada página deve ser rolável, com zoom e se o usuário tocar em uma parte do PDF, um site ou galeria de fotos deverá aparecer.

Atualmente eu acho que eu poderia fazer isso com:

A. UIWebView

Exibe bem os PDFs, rolagem e zoom funcionam. Mas parece um monte de problemas para perceber as partes clicáveis do PDF.

Não sei se eu poderia usar CGPDFContextSetURLForRectConseguir que os eventos de toque do UIWebView façam algo como CGPDFContextSetURLForRect, parece que seria um hack "muito ruim". Vejo:http://github.com/psychs/iphone-samples/blob/master/WebViewTappingHack/Classes/PSWebView.m

B. Quartzo

Encontrei alguns recursos que descrevem como exibir PDFs diretamente via Quartz. Vejo:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html

Isso permitiria usar CGPDFContextSetURLForRectMas não tenho idéia se isso - como o UIWebView - suporta rolagem e zoom fora da caixa?

Alguém poderia me esclarecer sobre isso, por favor?

Obrigado pelo seu tempo!

[Editar: alterado 3.0 para 3.2] [Editar: minha "solução"]

Oi!

Eu poderia criar uma implementação funcional para PNG, mas não para PDF.

[Resumo] Minha solução foi Renderizar o conteúdo, interceptar os toques, recuperar as coordenadas relativas ao conteúdo exibido, se houver um toque, e finalmente pesquisar o que fazer em um mapeamento contendo as áreas interativas como coordenadas e o que fazer se eles são clicados.

[Para PNG] Foi muito mais complicado implementar algo assim do que eu imaginaria ... E a implementação que eu comecei a trabalhar depende muito do conteúdo que você deseja exibir, porque isso funciona para o UIImageView, mas não consegui fazê-lo funcionar com UIWebView.

Primeiro, você precisa de um UIScrollView e UIImageView para renderizar o conteúdo e oferecer suporte à rolagem / zoom. Em seguida, você precisa implementar algumas manipulações para obter os toques / gestos nos quais está interessado. Consulte: developer.apple.com/iphone/library/samplecode/ScrollViewSuite/Listings/1_TapToZoom_Classes_TapDetectingImageView_h.html

Este exemplo da apple fornece tudo o que você precisa para que esta peça funcione. Como bônus, ele também se preocupa em transformar as coordenadas em relação à janela de exibição do conteúdo, o que é muito útil! (caso contrário, você saberia apenas onde o toque aconteceu na tela, com apenas metade das informações necessárias se o conteúdo for com zoom / rolagem)

[Para PDF] Se você deseja fazer isso com PDF, a primeira coisa é que você precisa usar um UIWebView (provavelmente você pode fazê-lo via Quartz ou outra coisa também)

Obter os retoques com um UIWebView é uma verdadeira dor! Existem várias maneiras propostas na web e, além disso, ninguém fez o que deveria fazer. Depois de dias pesquisando no Google, encontrei esta jóia: cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html

Portanto, a subclasse de UIWebView não o leva a lugar nenhum, diferente do UIImageView, e você deve subclassificar UIApplicationMain e implementar seu método para lidar com eventos de toque. Aqui você pode reutilizar algumas das "coisas de manipulação de toque" do exemplo de maçã acima.

Agora você precisaria traduzir as coordenadas do toque para o seu conteúdo, se estiver com zoom / rolagem. O UIWebView NÃO faz isso por você, diferente do UIImageView!

Eu nunca consegui descobrir como obter as informações necessárias (qual parte do conteúdo em que nível de zoom) de um UIWebView para traduzir as coordenadas, mas devido aos requisitos alterados de PDF para PNG, não me importei em fazê-lo funcionar muito.

espero que isto ajude.

questionAnswers(1)

yourAnswerToTheQuestion