2013-07-04 2 views
1

Я использую UI Collection View для отображения ячеек с изображениями и связанными с ним данными (такими как дата, имя) в формате вертикальной прокрутки. Данные изображения извлекаются с сервера при появлении представления. Полученные данные затем преобразуются в UIImage, когда ячейка появляется.iOS Collection View Scrolling Lags

Проблема заключается в прокрутке. Каждый раз, когда появится новая ячейка, прокрутка немного зависает. Есть ли способ решить эту проблему? Я думал начать конвертацию NSData в UIImage в фоновый поток, чтобы предотвратить отставание. Не уверен, что это правильный путь.

+0

Использование SDWebImage с заполнителем – stack

ответ

1

Как говорится в стеке, вы должны загружать изображения асинхронно, и есть замечательные категории, которые делают это очень легко сделать, а именно категорию в SDWebImage или в AFNetworking. Эти категории UIImageView не только загружают изображения асинхронно, но также выполняют кэширование, при необходимости отменяют сетевые операции и т. Д. Для этого требуется много кода, если вы сделаете это правильно самостоятельно (захватив все те функции, которые я только что перечислил), но это очень легко, если вы используете одну из этих категорий.

Например, при использовании SDWebImage, вы можете:

#import "UIImageView+WebCache.h" 

, а затем:

[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
    if (error) 
     NSLog(@"%s: setImageWithURL error: %@", __FUNCTION__, error); 
}]; 

Или, если используется AFNetworking:

#import "UIImageView+AFNetworking.h" 

и

[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

или

[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:url] placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 
    NSLog(@"%s: setImageWithURLRequest error: %@", __FUNCTION__, error); 
}];