Табличное представление с кэшированием изображения и опцией «потянуть для обновления» - PullRequest
0 голосов
/ 27 марта 2012

Почти каждое приложение ios теперь имеет что-то вроде опции «Лента». Программирование, которое обычно включает в себя выборку изображений из Интернета, их кэширование, обработку страниц, «выбор обновления» и т. Д. - все стандартные вещи.

Но, похоже, для этого нет стандартного решения?

  • Я попробовал «три 20» - действительно большую, сложную библиотеку со многими модулями. Это действительно не хватает хорошей документации! И у него также были "замедления" при загрузке изображений из кэша.

  • Может быть, я должен использовать разные маленькие библиотеки для каждой маленькой задачи отдельно? Как HJCache, EGO и т. Д.

  • Или лучше писать все с нуля без каких-либо библиотек?

Пожалуйста, дайте мне совет относительно лучших практик здесь, я действительно застрял сейчас.

Ответы [ 2 ]

0 голосов
/ 09 июля 2012

Я фанат библиотеки Pull to Refresh от Leah Culver, или этой STableViewController , которая обрабатывает pull-to-refresh, а также бесконечную прокрутку вниз.

Для загрузки изображения попробуйте SDWebImage из приложения DailyMotion.

0 голосов
/ 27 марта 2012

Этот очень прост для добавления для обновления.

Для загрузки изображения я написал следующую категорию для UIImageView:

// .h
@interface UIImageView (UIImageView_Load)
- (void)loadFrom:(NSURL *)url completion:(void (^)(UIImage *))completion;
@end

// .m
#import "UIImageView+Load.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIImageView (UIImageView_Load)

- (void)loadFrom:(NSURL *)url completion:(void (^)(UIImage *))completion {

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        if (data) {
            self.image = [UIImage imageWithData:data];
            if (completion) completion(self.image);
        }
    }];
}

@end

// To use it when building a cell

//...

MyModelObject *myModelObject = [self.myModel objectAtIndex:indexPath.row];
if (myModelObject.image) {
    cell.imageView.image = myModelObject.image;
} else {
    NSURL *url = [NSURL urlWithString:myModelObject.imageUrl];
    [cell.imageView loadFrom:url completion:^(UIImage *image) {
        // cache it in the model
        myModelObject.image = image;
        cell.imageView.image = image;
    }];
}

// ...
...