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

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

作者: 梁森的简书 | 来源:发表于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