我需要创建一个 iPad 应用程序来渲染多个 PDF 文件(一个文件包含一页)。
每个页面都应该是可滚动、可缩放的,如果用户点击 PDF 的一部分,应该会弹出一个网站或照片库。
目前我认为我可以通过以下方式做到这一点:
A.UIWebView
很好地显示 pdf,滚动和缩放也有效。但是实现PDF的可点击部分看起来很麻烦。
- 我不知道是否可以使用 CGPDFContextSetURLForRect
- 从 UIWebView 获取触摸事件来执行 CGPDFContextSetURLForRect 之类的操作,我自己看起来像是一些“非常糟糕”的黑客行为。看:http://github.com/psychs/iphone-samples/blob/master/WebViewTappingHack/Classes/PSWebView.m http://github.com/psychs/iphone-samples/blob/master/WebViewTappingHack/Classes/PSWebView.m
B、石英
我找到了一些描述如何通过 Quartz 直接显示 PDF 的资源。
看:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html
- 这将允许使用 CGPDFContextSetURLForRect
- 但我不知道这是否会像 UIWebView 一样支持滚动和缩放?
有人可以告诉我这个吗?
谢谢你的时间!
[编辑:将 3.0 更改为 3.2]
[编辑:我的“解决方案”]
Hi!
我可以为 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
所以...与 UIImageView 不同,子类化 UIWebView 不会给你带来任何好处,你必须子类化 UIApplicationMain 并实现其处理触摸事件的方法。
在这里,您可以重用上面苹果示例中的一些“触摸处理材料”。
现在,如果触摸是可缩放/滚动的,您需要将触摸的坐标转换为您的内容。与 UIImageView 不同,UIWebView 不会为您执行此操作!
我永远无法弄清楚如何从 UIWebView 获取所需的信息(哪个缩放级别的内容的哪一部分)来转换坐标,但由于从 PDF 到 PNG 的要求发生了变化,我不在乎让它工作太多。
希望这可以帮助。