美文网首页
下载多张图片保证图片的顺序

下载多张图片保证图片的顺序

作者: 梁森的简书 | 来源:发表于2020-12-21 16:38 被阅读0次

先站在巨人的肩膀上

我们可以创建多个UIImageView对象,通过UIImageView对象使用SDWebImage获取Kingfisher去下载图片,下载完图片后去UIImageView对象中获取对应的图片。

使用数组去接收下载的图片

既然图片是有序的,那么我们就可以创建一个数组,数组中元素个数是和下载图片的张数一样的,每下载完成一张图片就将图片放到数组中相应的位置上。
代码:

#pragma mark --- 多个图片上传后, block 回调 URL ,按照顺序装入新数组
- (void)picsUploadDemoimages:(NSArray *)images{
    NSMutableArray *picUrlArray = [NSMutableArray array];
    for (int i = 0; i < images.count; i++) {
        [picUrlArray addObject:[NSNull null]];
    }
//    dispatch_queue_t queue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_group_t dispatchGroup = dispatch_group_create();
        for (NSInteger i = 0; i < images.count; i ++) {
            dispatch_group_async(dispatchGroup, queue, ^{
                NSLog(@"currentThread:%@", [NSThread currentThread]);
                dispatch_group_enter(dispatchGroup);
                [self uploadDemoSucessBlock:^(NSString *url) {
//                    NSLock * lock = [[NSLock alloc]init];
//                    [lock lock];
                    NSLog(@"i:%ld---url:%@", (long)i, url);
                    picUrlArray[i] = url;
//                    [lock unlock];
                    dispatch_group_leave(dispatchGroup);
                } ErrorBlock:^{
                       dispatch_group_leave(dispatchGroup);
                } index:i];
            });
        }
    dispatch_group_notify(dispatchGroup, queue, ^{
       if (picUrlArray.count == images.count && picUrlArray.firstObject != nil) {
       // 已经传完毕
           NSLog(@"picUrlArray:%@", picUrlArray);
       }
    });

    NSLog(@"🍎");
}


- (void)uploadDemoSucessBlock:(void (^)(NSString *))SucessBlock
                    ErrorBlock:(void (^)(void))errorBlock
                        index:(NSInteger)index{
    if (SucessBlock) {
        SucessBlock([NSString stringWithFormat:@"%ld-PicURL",index]);
    }
}

使用字典去接收下载的图片

每下载完成一张图片就使用字典去接收,key是装有图片URL数组的下标,value是图片即image对象,当所有的图片都下载完成后去遍历该字典,通过下标这个key去获取到每张图片并按顺序(key保证了顺序)放到数组中。

相关文章

网友评论

      本文标题:下载多张图片保证图片的顺序

      本文链接:https://www.haomeiwen.com/subject/aeergktx.html