关于Apple的LazyTableImages示例的问题 - 行为与app store不完全相同

bpa*_*100 7 iphone sdk asynchronous image download

我有一个带有项目列表的UITableView,每个项目都有自己的图像.我认为Apple的LazyTableImages示例项目非常适合学习,并且在检索原始列表数据之后用于实现异步下载图像的相同类型的过程.

在大多数情况下,它工作得很好,除了我注意到这个示例应用程序之间的行为的细微差别,以及实际的应用商店下载图像的方式.

如果您启动LazyTableImages示例,然后快速向下滑动,您将看到图像在滚动完全停止之后才会显示.

现在,如果您使用实际应用程序商店中的项目列表执行相同的测试,您将看到图像在新项目进入视图时立即开始显示,即使滚动尚未停止.

我正在努力实现这些相同的结果,但到目前为止我还没有取得任何进展.有没有人对如何做到这一点有任何想法?

谢谢!

bpa*_*100 10

我很困惑,没有人能回答这个......

所以,我最终想出了如何实现与实际应用商店中使用的完全相同的效果,关于图标的下载/显示方式.

参加LazyTableImages示例项目并进行一些简单的修改.

  1. 进入根视图控制器并在cellForRowAtIndexPath中删除有关表滚动和/或减速的所有检查

  2. 删除对loadImagesForOnScreenRows的所有调用,从而删除该方法.

  3. 进入IconDownload.m并将startDownload方法更改为执行异步映像下载,而是在后台线程上执行同步下载.删除startDownload中的所有代码,并添加以下内容,如下所示:


- (void)startDownload
{
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImage) object:nil];

    [queue addOperation:operation];

    [operation release];
    [queue release];
}

然后,添加一个loadImage,如下所示:


- (void)loadImage
{
    NSData *imageData = [[NSData alloc] initWithContents OfURL:[NSURL URLWithString:appRecord.imageURLString]];
    self.apprecord.appIcon = [UIImage imageWithData:imageData];
    [imageData release];

    [self performSelectorOnMainThread:@selector(notifyMainThread) withObject:nil waitUntilDone:NO];
}

然后,像这样添加notifyMainThread:


- (void)notifyMainThread
{
    [delegate appImageDidLoad:self.indexPathInTableView];
}

完成!运行它,您将看到确切的应用商店行为,不再等待请求图像下载,直到滚动停止,并且不再等待图像显示,直到滚动停止,或者直到用户从屏幕移开他们的手指.

一旦准备好显示单元格就立即下载图像,并且图像在下载时立即显示.

对不起打字错误,我没有从我的应用程序中粘贴这个,我输入了,因为我现在离开了我的mac ...

无论如何,我希望这对你有帮助...