从URL和缓存中逐个加载和显示图像

时间:2017-05-08 05:40:12

标签: ios objective-c nsurlsession sdwebimage

我正在使用SDWebImage库在我的滚动视图中使用页面控件显示图像。

如何逐个下载图像并显示它。假设我有4个URL:url1,url2,url3,url4 所以我想首先显示url1然后... 2,3,4..so on ... 2,3,4应该在后台加载,直到没有下载占位符图像显示在那里。

下面是我的循环内部代码,我试试它是完美的吗?

        NSString* serverImgicon=<url here in a loop>;
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
            NSURL *url=[NSURL URLWithString: serverImgicon];
            //set your image on main thread.
            dispatch_async(dispatch_get_main_queue(),^{
                [img sd_setImageWithURL:url
                       placeholderImage:[UIImage imageNamed:@"placeholderImg"]];
            });
        });

2 个答案:

答案 0 :(得分:1)

尝试下面的代码,它会正常工作

 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

        CollectionViewCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

        myobject *newobject = _myarray[indexPath.item];
        cell.nameLabel.text =newobject.name;

          dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
        dispatch_async(queue, ^{

            [cell.activityIndicatorForImage startAnimating];
            UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:
                                                     [NSURL URLWithString:newobject.image]]];
            dispatch_sync(dispatch_get_main_queue(), ^{
                if(image!= nil){
                    [[cell myimage] setImage:image];
                    [cell.activityIndicatorForImage setHidden:NO];

                }else{
                    UIImage * image = [UIImage imageNamed:@"PLACEHOLDER"];
                    [[cell myimage] setImage:image];
                    [cell.activityIndicatorForImage setHidden:YES];
                    [cell.activityIndicatorForImage stopAnimating];

                }


                [cell setNeedsLayout];
            });
        });

        return cell;
    }

答案 1 :(得分:-1)

使用sdwebCache以异步方式加载图像

https://github.com/rs/SDWebImage

/ ****************** /

#import "UIImageView+WebCache.h"

然后像这样加载图片:

NSArray *tempArray = [stickersThumbRecords objectForKey:collectioName];

                if (tempArray.count>indexPath.item) {
                    NSURL *url = [NSURL URLWithString:[tempArray objectAtIndex:indexPath.item] ];

                    [imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholderFrame"]];
                }