私が知る限り、これを行う一般的な方法はありません。私は間違っていると証明されたい。
私は現在作業中のアプリで同じ要件を満たしており、昨日サムネイルジェネレータを書きました。私が取ったアプローチは、ファイルへのパスと完了ハンドラブロックをサムネイルジェネレータオブジェクトに渡すことでした。
サムネイルジェネレータにはNSOperationQueue
があり、バックグラウンドスレッドでサムネイル生成プロセスを生成し、直ちにプレースホルダサムネイルを返します。
サムネイルが生成されると、サムネイルジェネレータはメインスレッド上で補完ハンドラを呼び出します。この部分を行うには、おそらくNSInvocation
オブジェクトを使用する必要があります。
生成するサムネイルが2つ以上ある場合、同期をとると遅延が顕著になります。プレースホルダ+補完ハンドラブロックアプローチを使用することは、UIが応答性のままであることを意味します。
メインスレッド上で完了ハンドラブロックを呼び出すことは重要です。なぜなら、メインスレッド上でのみ実行する必要があるビューをほぼ確実に更新するからです。これをしないと、スクロール・ビューがスクロールするまで内容を表示しないなど、非常に奇妙なエラーが発生します。
ビデオのサムネイルを取得するのに、実際にMPMoviePlayerController
を使用する必要はありません。 AVAssetImageGenerator
はこれを行うための「アップル認定」の方法です。 the AV Foundation Programming Guideでこれを行う方法の例があります。
出典
2011-02-18 19:19:05
Jim
ありがとうございました。 palceholder +あなたが話している完成のいくつかの例がありますか?私は以前それを使用していません。そして、各ファイルのファイル拡張子を調べて、各アイテムに使用するサムネイルを決定しましたか? – smcdrc
これは何も特別なことではなく、プレースホルダは、サムネイルが生成される前に使用するものです。だから、あなたが作成しているものが 'UIImage'であれば、ビューコントローラが最初に表示できる汎用アイコンを持つ' UIImage'を返し、サムネイルが生成されたときに置き換えます。 – Jim
補完ハンドラはブロックです。[ブロックの短い実践ガイド](http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html%23//apple_ref/doc/ uid/TP40009758)。私は代議員たちと簡単に実験しましたが、この目的のためには少し固すぎると決めました。 – Jim