2011-03-09 1 views
1

私は、ページごとにPDFを表示してメモリ使用量を減らすことになっている小さなPDFビューアを作成しました。 PDFの特定のページを表示するPdfViewControllerで構成されています(UIScrollView、CATiledLayerを使用)。UIViewControllerを使用したコードデザインの質問(PDFページをページごとに描画) - ベストプラクティス?

私は次のページを表示したい場合(スワイプジェスチャーを使って)、どうすればいいですか?私のコントローラがそれを処理し、ビューを更新するべきか(これは、あなたが見ているとすぐにCATiledLayerがクラッシュする恐れがあるためです:-))、またはすべてのページフリップのために新しいPdfViewControllerを生成する "外部"より柔軟なaproach)?

このような状況ではどのようなことがベストプラクティスですか? UINavigationControllerを見ると、すべてのレベルで新しいUIViewControllerをプッシュするはずです。しかし、そこに押し込まれているすべてのコントローラは異なるかもしれません。私の場合、すべてのページが同じコントローラを使用しています。

答えて

0

ここに2つの有用なリソースがあります Fast and Lean PDF Viewer for iPhone/iPad/iOs - tips and hints?は、pdfsの表示に関する情報をたくさん集めています。

https://github.com/vfr/Readerあなたがやろうとしていることをする基本的なPDFリーダーです。

ネストされたUIViewControllersを使用するかどうかに関しては、私はそれを推奨しますが、あなたはそれらが回転を非常にうまく処理しないことを認識しておく必要があります(私は向き変更イベントを受け取らないと思う)viewDidAppear他のビューライフサイクルイベントは、モーダルビューコントローラをルートビューコントローラからのみ表示するようにしてください。そうでなければ、正しく表示されません(私はそれらの問題が横方向に間違った向きで表示されるか、間違った位置に表示されます)。

私が構築したアプリでは、1つのUIViewControllerを使用してpdfの表示を管理し、他の「サブ」コントローラのNSObjectをサブカテゴリにして管理しやすくしました。たとえば、私は垂直スクロールとpdfページの水平スクロールがありました。最初の試みでは入れ子のUIViewControllersを使用しましたが、垂直スライドを管理するためにNSObjectからサブクラス化されたコントローラを使用して再構築するまでオリエンテーションに問題がありました。

1

UINavigationControllerを使用しないでください。一般に、UINavControllerは、プッシュされるアイテムのセットが限られているドリルダウン操作に使用する必要があります。

あなたのケースでは、最適なオプションはページネーションを処理し、内部にCATiledlayerを含む新しいUIViewを作成する大きなUIScrollViewを使用することだと思います。

私は自分のアプリケーションのために作成しましたQuicklyticsあなたのためにそのほとんどを行うPagedViewControllerクラス。基本的には、各ページのUIViewを作成してコントロールに渡すPageDataSourceを作成します。あなたのコード上でまったく同じようにあなたはこれを使用することはできませんが、それはあなたがどこへ行くには良いアイデアを与えるでしょう:

https://github.com/escoz/monotouch-controls/blob/master/UICatalog/PagedViewController.cs

これはあなたのお役に立てば幸いです。

+0

あなたは間違っています。私はUINavigationControllerを使用しません。私はちょうどそれを比較として使用しました:UINavigationControllerはUIViewControllerで、他のUIViewControllerを押します。だからあなたはボックス化されたUIViewControllerを持っています。これは何とかAppleのルール「1つのコントローラにつき1つのコントローラ」に対するものです。事は:それは論理的であり、convienentです。しかし、あなたがUIViewControllersのボックスを表示すると、ViewDidAppearなどの内部コントローラがトリガされません。 AppleがUINavigationControllerのようなこれらすべてのコントローラハンドラにkludgesを使用しているのだろうか?したがって、私の質問:同じ方法でそれをやりますか、それを避けますか? – Krumelur

+0

ああ、私はあなたのアプリのためにUINavC自体を使いたいという印象の下にいました。アップルのUIVCをクルージングと呼ぶことはありません。インナービューコントローラは不要なため自動的にトリガされません.UINavCを想像してみてください。常にViewDidAppearをスタックのすべてのコントローラで起動するか一番上のもの?そのような種類のロジックがUINavCの中にあるので、あなたもカスタムコントローラーに入れます。Pag​​edViewControllerコードを見て、私が何を意味するのか見てみましょう。 –

関連する問題