繁体   English   中英

按顺序使用SDWebImage加载图像

[英]load images using SDWebImage in order

经过大量的阅读和推荐,我正在尝试在我的应用程序中实现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;

它将一次下载一个图像。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM