iphone - 苹果样品的LazyTableImages问题与 App Store的行为不完全一样

  显示原文与译文双语对照的内容
0 0

我有一个UITableView和一个项目列表,每个都有自己的形象。 我认为苹果示例项目的LazyTableImages在检索原始的列表数据之后,可以完美地从一种异步下载图像的过程中学习。

在大部分情况下,它工作得很好,除了我注意到了在这个示例应用程序中的行为差异,以及实际的App Store 下载图像的。

如果你启动LazyTableImages样本,然后做一个快速的轻轻向下滚动,你将看到图片没有显示,直到滚动后靠站。

现在,如果你在实际 App Store 中使用一个项目列表进行相同的测试,你就会看到这些图像在新项目出现时立即开始显示,即使滚动没有停止。

我试图达到同样的效果但是到目前为止我还没有做任何进展。 你有什么想法?

谢谢!

时间: 原作者:

0 0

我很困惑,没有人能回答这个问题。

所以,我最终找到了如何实现确切用于实际 App Store 同样的效果,关于如何下载/图标显示。

接受LazyTableImages示例项目并进行一些simpled修改。

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

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

  3. 进入 IconDownload.m 并将startDownload方法更改为而不是做一个异步图像 downlaod,而是在后台线程上进行同步下载。 移除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];
}

完成运行它,你将看到精确的App Store 行为,直到滚动停止,再等待图像下载,直到滚动停止,直到用户从屏幕上删除了它的手指。

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

对不起,我没有从我的应用程序中粘贴任何错误,我输入了它,因为我现在远离我的mac 。

总之,希望这对你们都有帮助。

原作者:
0 0

检查 UIScrollViewDelegate 。 我已经通过侦听 scrollViewDidScroll: 实现了一些类似的操作,计算滚动速度( 通过检查 contentOffset 上最后记录的contentOffset,除以时间的差异),并开始加载一次到特定阈值下的图像。 ( 你可以实现类似UIScrollViewDelegate的东西 scrollViewDidEndDragging:willDecelerate: 也是如此。

当然,你不必检查速度;你可以只在 UITableViewDelegate的上加载图像 tableView:willDisplayCell:forRowAtIndexPath: 每当你看到一个新的细胞,但我发现如果用户翻了大量的细胞,你不需要在你看到他们的速度减慢到浏览的时间。

原作者:
...