2011-02-18 5 views
1

私は、さまざまな種類のドキュメント(mp4、pdf、png、およびppt)のサムネイルを作成したいと考えています。 MPMovieplayerController:requestThumbnailImagesAtTimesまたは現在のレイヤーのUIGraphicsGetCurrentContext(効果的にスクリーンショット)を取得します。さまざまな種類のマルチメディア用のカスタムサムネイル

これらのファイルのサムネイルを取得するには、より良い方法がありますか?

アイテムのサムネイルを取得するのに好ましい方法は何ですか?それぞれ別の方法?

答えて

0

私が知る限り、これを行う一般的な方法はありません。私は間違っていると証明されたい。

私は現在作業中のアプリで同じ要件を満たしており、昨日サムネイルジェネレータを書きました。私が取ったアプローチは、ファイルへのパスと完了ハンドラブロックをサムネイルジェネレータオブジェクトに渡すことでした。

サムネイルジェネレータにはNSOperationQueueがあり、バックグラウンドスレッドでサムネイル生成プロセスを生成し、直ちにプレースホルダサムネイルを返します。

サムネイルが生成されると、サムネイルジェネレータはメインスレッド上で補完ハンドラを呼び出します。この部分を行うには、おそらくNSInvocationオブジェクトを使用する必要があります。

生成するサムネイルが2つ以上ある場合、同期をとると遅延が顕著になります。プレースホルダ+補完ハンドラブロックアプローチを使用することは、UIが応答性のままであることを意味します。

メインスレッド上で完了ハンドラブロックを呼び出すことは重要です。なぜなら、メインスレッド上でのみ実行する必要があるビューをほぼ確実に更新するからです。これをしないと、スクロール・ビューがスクロールするまで内容を表示しないなど、非常に奇妙なエラーが発生します。

ビデオのサムネイルを取得するのに、実際にMPMoviePlayerControllerを使用する必要はありません。 AVAssetImageGeneratorはこれを行うための「アップル認定」の方法です。 the AV Foundation Programming Guideでこれを行う方法の例があります。

+0

ありがとうございました。 palceholder +あなたが話している完成のいくつかの例がありますか?私は以前それを使用していません。そして、各ファイルのファイル拡張子を調べて、各アイテムに使用するサムネイルを決定しましたか? – smcdrc

+0

これは何も特別なことではなく、プレースホルダは、サムネイルが生成される前に使用するものです。だから、あなたが作成しているものが 'UIImage'であれば、ビューコントローラが最初に表示できる汎用アイコンを持つ' UIImage'を返し、サムネイルが生成されたときに置き換えます。 – Jim

+0

補完ハンドラはブロックです。[ブロックの短い実践ガイド](http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html%23//apple_ref/doc/ uid/TP40009758)。私は代議員たちと簡単に実験しましたが、この目的のためには少し固すぎると決めました。 – Jim

関連する問題