以前の記事「UIDocumentInteractionControllerを用いて別アプリケーションを開くメニューを表示する方法について」ではアクションシートやクイックルックを表示する方法を紹介しました。クイックルックの実装クラスであるQLPreviewControllerはクイックルックと同じプレビューや他アプリケーションへの転送機能を持っており、さらにプレビュー対象を複数項目にすると、項目間のナビゲーションを行う矢印が付きます (ただし、モーダルビューのとき)。また、データソースがデリゲートになっているので、ナビゲーションによる移動後にオンデマンドでデータの作成や取得を行うことができます。
本記事ではiOS4.0上で、クイックルックのクラスQLPreviewControllerを利用したプレビューを表示する方法について紹介します。詳細はAppleのドキュメント「Document Interaction Programming Topics for iOS」のUsing the Quick Look Frameworkを参照してください。
クイックルックの表示
QLPreviewControllerはUIViewControllerのサブクラスであるため、ナビゲーションコントローラにpushすることもできますが、クイックルックのように、モーダルにして全画面表示にすると項目間のナビゲーションを行う矢印が付きます。具体的には次のコードのようになります。
QLPreviewController* ql = [[QLPreviewController alloc] init]; [self.navigationController presentModalViewController:ql animated:YES]; ql.dataSource = self; [ql refreshCurrentPreviewItem];
なお、QuickLook/QuickLook.hをインポートして、フレームワークQuickLook.frameworkを追加する必要があります。また、delegateはQLPreviewControllerを閉じるときとプレビュー内でリンクをクリックしたときの挙動をカスタマイズするだけですので、今回は省略しています。
データソースの実装
データソースのためのプロトコルQLPreviewControllerDataSourceには2つの必須メソッドnumberOfPreviewItemsInPreviewController:
とpreviewController:previewItemAtIndex:
があります。前者は表示項目数、後者は表示項目のURLとタイトルを示すQLPreviewItemを返すメソッドであり、コードは次のようになります。
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController*)controller { return [previewItems count]; } - (id<QLPreviewItem>)previewController:(QLPreviewController*)controller previewItemAtIndex:(NSInteger)index { FileInZipInfo* info = [previewItems objectAtIndex:index]; NSString* path = [self extractFile:info]; PreviewItem* item = [[PreviewItem alloc] initWithURL:[NSURL fileURLWithPath:path]]; return [item autorelease]; }
上記のコードはZip内のファイルを必要になったときに解凍して表示させるコードになっています。ここで、extractFile:はZip内のファイルを解凍するメソッドとします。基本的には以前の記事「safx: Objective-Zipを用いたZip書庫の操作について」を参照に実装可能ですので、ここでは省略しています。また、PreviewItemは単純にプロトコルQLPreviewItemを実装しているだけですので、これも省略しています。
QLPreviewControllerで表示可能な形式
QLPreviewControllerは次の形式を表示可能です。これは、おそらくクイックルックと同じでしょう。
- iWork documents
- Microsoft Office文書
- リッチテキスト
- 画像
- 統一型識別子 (UTI) の public.text にあたるもの
- CSV
まとめ
クイックルックのクラスQLPreviewControllerを利用したプレビューを表示する方法について紹介しました。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。