首页 文章

iPhone OS 3.2; PDF渲染;用户交互

提问于
浏览
4

我需要创建一个iPad应用程序,它将呈现多个PDF文件(一个文件包含一个页面) . 每个页面都应该是可滚动的,可缩放的,如果用户点击PDF的一部分,则应弹出网站或照片库 .

目前我认为我可以这样做:

A. UIWebView

显示pdf的精美,滚动和缩放工作 . 但实现PDF的可点击部分看起来很麻烦 .

B.石英

我找到了一些描述如何通过Quartz直接显示PDF的资源 . 见: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

这个来自苹果的样本提供了使这部分工作所需的一切 . 作为奖励,它还需要关注相对于内容视口的坐标转换,这非常方便! (否则你只会知道屏幕上的点击发生在哪里,如果你的内容是缩放/可滚动的,你只需要信息的一半)

[对于PDF]如果你想用PDF做这件事,首先你需要使用UIWebView(可能你也可以通过Quartz或其他东西来做)

使用UIWebView进行操作真是太痛苦了!网上提出了很多方法,除了一个没人做了它应该做的事情 . 经过几天的谷歌搜索,我发现了这个宝石:cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html

所以...子类化UIWebView不会让你在任何地方与UIImageView不同,你必须继承UIApplicationMain并实现其处理触摸事件的方法 . 在这里,您可以重复使用上面的apple-examlpe中的一些“Touch-Handling-Stuff” .

现在,如果它是缩放/可滚动的,您需要将触摸的坐标转换为您的内容 . 与UIImageView不同,UIWebView不会为你做这个!

我永远无法弄清楚如何从UIWebView获取所需的信息(zoomlevel的内容的哪一部分)来转换坐标,但由于从PDF到PNG的要求发生了变化,我并不想让它工作太多 .

希望这可以帮助 .

1 回答

  • 0

    使用CGPDF *运算符将允许您编写UIPDFView,其操作与UIImageView完全相同,但使用PDF作为源图像 . 创建自己的UIView自定义子类并实现drawRect:to,最终调用CGContextDrawPDFPage . 基于快速谷歌搜索(因为我知道关键字),this page似乎很好地解释了这方面的事情 .

    然后,您可以直接将自定义UIView子类替换为UIImageView,并完全按照PNG解决方案进行操作 .

相关问题