Насколько я знаю, нет общего способа сделать это. Мне бы хотелось, чтобы я был ошибочен.
У меня такое же требование в приложении, над которым я сейчас работаю, и написал генератор миниатюр вчера. Подход, который я принял, состоял в том, чтобы передать путь к файлу и блок обработчика завершения до объекта генератора эскизов.
Генератор миниатюр имеет NSOperationQueue
, который порождает процесс генерации миниатюр в фоновом потоке и сразу же возвращает миниатюру заполнителя.
Когда миниатюра сгенерирована, генератор миниатюр вызывает обработчик завершения в основном потоке. Для этой части вам, вероятно, понадобится объект NSInvocation
.
Выполнение этого синхронно приводит к заметной задержке, если у вас есть более чем несколько эскизов для генерации. Использование подхода компоновщика + завершения обработчика блокировки означает, что пользовательский интерфейс остается отзывчивым.
Важно называть блок обработчика завершения основного потока, потому что он почти наверняка будет обновлять ваши представления, которые должны выполняться только в основном потоке. Если вы этого не сделаете, вы получите некоторые очень странные ошибки, например, прокрутки, не отображающие их содержимое, пока вы не пролистнете их.
Вам не нужно использовать MPMoviePlayerController
, чтобы получить миниатюры видео; AVAssetImageGenerator
- это «одобренный Apple» способ сделать это; есть пример того, как это сделать в the AV Foundation Programming Guide.
Спасибо за помощь. Есть ли у вас несколько примеров того, как вы понимаете, что у вас есть. Раньше я этого не использовал. И вы просто посмотрели расширение файла для каждого файла, чтобы определить, какой миниатюру использовать для каждого элемента? – smcdrc
Это ничего особенного, местозаполнитель - это то, что вы используете до создания эскизов. Поэтому, если все, что вы создаете, это 'UIImage', тогда вы можете вернуть« UIImage »с общим значком, который может отображаться вашим контроллером вида, и затем заменить его, когда эскиз был сгенерирован. – Jim
Обработчик завершения - это блок, для которого см. [Краткое практическое руководство по блокам] (http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html%23//apple_ref/doc/ UID/TP40009758). Я кратко экспериментировал с делегатами, но решил, что для этой цели они были слишком жесткими. – Jim