我写了一个小的PDF查看器,它应该逐页显示PDF以减少内存使用量。 它由一个PdfViewController组成,它显示了PDF的特定页面(使用UIScrollView,CATiledLayer)。
现在(也许是愚蠢的)问题是:如果我想显示下一页(使用滑动手势等),我该怎么做?我的控制器应该处理它并更新它的视图(这是一个恐怖,因为CATiledLayer似乎一旦看到它就会崩溃:-)),或者应该有一个“外部”控制器为每个页面翻转生成一个新的PdfViewController(更灵活的方法)?
在这些情况下,最佳做法是什么?看看UINavigationController,你应该为每个级别推送一个新的UIViewController。但在那里,所有被推动的控制器可能会有所不同。就我而言,所有页面都使用相同的控制器。
答案 0 :(得分:1)
您可能不应该使用UINavigationController。通常,UINavController应该用于向下钻取操作,在这里您可以推送一组有限的项目。
在你的情况下,我认为最好的选择是使用一个大的UIScrollView来处理分页,然后在里面创建一个带有CATiledlayer的新UIView。
我为我的应用Quicklytics创建了一个PagedViewController类,它可以为您完成大部分操作。您基本上创建一个PageDataSource,为每个页面创建UIViews,并将其处理到控件。您可能不会像在代码中那样使用它,但它会让您知道要去哪里:
https://github.com/escoz/monotouch-controls/blob/master/UICatalog/PagedViewController.cs
希望这会对你有所帮助。
答案 1 :(得分:0)
这是两个有用的资源 Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?收集有关显示pdfs的大量信息。
https://github.com/vfr/Reader用于ios的基本pdf阅读器,可以完成您要执行的操作。
关于是否使用嵌套的UIViewControllers,我建议不要使用它,但是如果你这样做,你应该知道它们不能很好地处理旋转(我认为它们不会接收方向改变事件)以及viewDidAppear和其他视图生命周期事件,也要确保只显示来自根视图控制器的模态视图控制器,否则它们将无法正确显示(我有问题,它们在横向或错误的位置出现在错误的方向)。
在我构建的应用程序中,我使用了一个UIViewController来管理pdf的显示,并且我将NSObject子类化为任何其他“子”控制器,以使其更易于管理。例如,我有垂直滚动以及pdf页面的水平滚动。我的第一次尝试使用了嵌套的UIViewControllers但是我遇到了方向问题,直到我使用从NSObject子类化的控制器来重建以管理垂直幻灯片。