Как ускорить загрузку изображений с помощью библиотеки ресурсов? - PullRequest
0 голосов
/ 22 октября 2011

Я пишу приложение, которое является клоном UIImagePicker, но использует библиотеку Assets.Когда пользователь выбирает фотографию, загрузка изображения занимает слишком много времени.Я замечаю, что когда я использую приложение для фотографий, которое имеет идентичные функциональные возможности относительно того, что я разрабатываю, загрузка изображений происходит немного быстрее.Я слышал, как другой респондент на этом сайте упоминал следующее, чтобы имитировать функциональность приложения для фотографий:

"Сначала загрузите уменьшенное изображение (лучше всего с dispatch_async) - это должно быть очень быстро.завершено, загрузите полноэкранное изображение, как вы делали выше. Это то, что делает яблоко в приложении Photo, чтобы обеспечить удобство работы с пользователем. "

У кого-нибудь есть примеры кода, как это можно сделать?Я не совсем уверен, что понимаю, что он имеет в виду.

Также вот мой код, который я использую для загрузки изображения (я передаю изображение в качестве параметра другому контроллеру представления):

myImage = [UIImage imageWithCGImage:[[myAsset defaultRepresentation] fullScreenImage]];

1 Ответ

4 голосов
/ 22 октября 2011

Класс ALAsset имеет два метода для получения миниатюр:

- (CGImageRef)thumbnail
- (CGImageRef)aspectRatioThumbnail

Бьюсь об заклад, они быстрее, чем получить полноэкранную версию ресурса.

Кроме того, вы можете обернуть их асинхронной операцией. Обязательно обновите пользовательский интерфейс в основном потоке. Примерно так:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    /* obtain the image here */
    dispatch_async(dispatch_get_main_queue(), ^{
        /* update screen here */
    });
    [pool drain];
});

Если вам нужно получить миниатюры для видео, вы должны использовать AVAssetImageGenerator. У него есть метод для их асинхронного получения.

Найдите образец кода Apple (AVEditDemo и, возможно, другие, работающие с библиотекой ресурсов).

...