2013-08-20 116 views
0

经过大量阅读和推荐,我试图在我的应用程序中实现SDWebImage框架。我能够从服务器下载图像,但问题是,由于图像大小不同,因此不会按照我称之为的顺序下载它们(并且希望它们是)。使用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); 
     } 
    }]; 
    } 
} 

哪有我解决这个问题(这是我的循环逻辑?)。此外,我试图取消所有的下载时,单击一个按钮,并使用[_manager cancelAll],但似乎并没有工作 - 任何想法为什么?

谢谢fam!

新增:

现在的问题是,经理插入所有缓存图像到数组第一,使定单被破坏,即使是在我的setMaxConcurrentOperationCount设置为1,不知道如何保持即使使用高速缓存的图像也可以下载。

+2

我不熟悉这个框架。如果它在幕后使用NSOperationQueue,您可以将它设置为maxOperations = 1吗?这样它不会运行一堆并行操作,但会按照您将它们放入队列的顺序执行它们。 – Justin

+0

[_manager downloadWithUrl ...]返回一个操作,我想我可以添加到我自己的操作中,但它会崩溃,当我尝试这么做,因此我现在有点避免它... – royherma

回答

1

由于冰简单,由“贾斯汀Amberson”指出:

Go to SDWebImageDownloader.m 

我假设你使用的是最新SDWebImage库。

在线72:

_downloadQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; 

将其更改为:

_downloadQueue.maxConcurrentOperationCount = 1; 

它会同时下载一个图像。

干杯

+0

谢谢里诺!另外,我所需要的只是调用[_manager cancelAll]取消所有这些请求的图像加载? – royherma

+0

的确如此:[[SDWebImageManager sharedManager] cancelAll] :) –

+0

看起来像是将该属性暴露给外部的机会。 – Justin