具有图像缓存和“拉取更新”选项的表视图

时间:2012-03-27 19:30:25

标签: ios uitableview three20

现在几乎每个ios应用程序都有“Feed”选项。 编程通常包括从网上获取图像,缓存它们,处理页面,“拉到更新选项”等等 - 所有标准的东西。

但看起来没有标准的解决方案呢?

  • 我尝试了“三个20” - 真正庞大,复杂的图书馆,里面有很多模块。它真的缺乏良好的文档!从缓存中提取图像时,它也有“减速”。

  • 也许我应该分别为每个小任务使用不同的小库?像HJCache,EGO等

  • 或者在没有任何库的情况下从头开始编写所有内容会更好吗?

请在这里给我关于最佳实践的建议,我现在真的被困住了。

2 个答案:

答案 0 :(得分:0)

This one非常容易接受刷新。

对于图像加载,我为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;
    }];
}

// ...

答案 1 :(得分:0)

我是Leah Culver的Pull to Refresh库的粉丝,或者是STableViewController处理拉动刷新以及向下滚动的无尽滚动。

对于图片加载,请尝试DailyMotion应用中的SDWebImage