经过大量阅读和建议,我尝试在我的应用程序中实现SDWebImage框架。我可以从服务器下载图像,但是问题在于,由于图像大小不同,因此无法按照我称呼它们的顺序(并且希望它们被下载)下载。
这是供参考的框架:https://github.com/rs/SDWebImage
正如您可以从打印行看到的证据:
2013-08-20 11:11:01.785 Project[10785:c07] SD LOAD 1 array count = 1
2013-08-20 11:11:02.668 Project[10785:c07] SD LOAD 0 array count = 2
2013-08-20 11:11:02.946 Project[10785:c07] SD LOAD 3 array count = 3
2013-08-20 11:11:03.306 Project[10785:c07] SD LOAD 2 array count = 4
2013-08-20 11:11:03.862 Project[10785:c07] SD LOAD 4 array count = 5
2013-08-20 11:11:04.094 Project[10785:c07] SD LOAD 5 array count = 6
2013-08-20 11:11:04.793 Project[10785:c07] SD LOAD 6 array count = 7
2013-08-20 11:11:04.837 Project[10785:c07] SD LOAD 7 array count = 8
2013-08-20 11:11:05.046 Project[10785:c07] SD LOAD 8 array count = 9
2013-08-20 11:11:05.428 Project[10785:c07] SD LOAD 9 array count = 10
下面是我的方法:
-(void)sdWebLoadImages:(NSMutableArray*)imagesURLS{
[_loadedImages removeAllObjects];
NSMutableArray *tempArray = [[NSMutableArray alloc]init];
_loadedImages = tempArray;
for (int i=0;i<imagesURLS.count;i++){
[_manager downloadWithURL:[imagesURLS objectAtIndex:i]
options:0
progress:^(NSUInteger receivedSize, long long expectedSize)
{
// progression tracking code
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType,BOOL finished)
{
if (image && finished)
{
[_loadedImages addObject:image];
NSLog(@"SD LOAD %i array count = %i",i,_loadedImages.count);
}
}];
}
}
我该如何解决(我的for循环逻辑中有问题吗?)。另外,单击按钮时,我试图取消所有下载,并且正在使用[_manager cancelAll],但似乎不起作用-知道为什么吗?
谢谢fam!
添加:
现在的问题是,即使我将setMaxConcurrentOperationCount设置为1,管理器也会首先将所有缓存的图像插入到阵列中,从而导致顺序被破坏。
最佳答案
就像冰一样简单,正如“ Justin Amberson”所指出的那样:
Go to SDWebImageDownloader.m
我假设您正在使用最新的SDWebImage库。
在第72行:
_downloadQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
更改为:
_downloadQueue.maxConcurrentOperationCount = 1;
它将一次下载一张图像。
干杯
关于ios - 依次使用SDWebImage加载图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18342172/