簡體   English   中英

如何在iOS中異步下載圖片?

[英]How to asynchronously download images in ios?

我想先在滾動視圖上創建imageview。我設置了占位符圖像或賦予imageview的背景色,以便顯示所有圖像視圖。

- (void)LoadDataInScrollView
{
    dispatch_queue_t imageQueue = dispatch_queue_create("Image Queue",NULL);

    //totalImageGetDict into count total Number of object and generate imageview.

    for (int ivalue = 0; ivalue < [totalImageGetDict count]; ivalue++) 
    {
        dispatch_async(imageQueue, ^{

            //define x value
            CGFloat xOrigin =ivalue *ascrollView.frame.size.width+50;

            imageView = [[UIImageView alloc] init];
            imageView.tag = ivalue;
            [imageView setBackgroundColor:[UIColor whiteColor]];
            imageView.frame = CGRectMake(xOrigin-40,imgYpos, ascrollView.frame.size.width-20, scrollViewHight);

            //then here first i set already downloaded image.it's comes from another class. getImageLoadDict into images are already downloaded**

            if ([getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]]!= nil)   
            {
                //dispatch_async(dispatch_get_main_queue(), ^{
                [imageView setImage:[getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]]];
                //});

            } 
            else 
            {
                //totalImageGetDict into remaining images object and asynchronously download here.

                STVisionPhoto *photoObj = [totalImageGetDict objectForKey:[NSNumber numberWithInteger:ivalue]];
                UIImage *newimage = [photoObj image];

                dispatch_async(dispatch_get_main_queue(), ^{
                    [imageView setImage:newimage];
                });
           }

           [ascrollView addSubview:imageView];
        });
    }
}

您可以使用SDWebImage來做到這一點。

編輯:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    UIImage * image = [UIImage imageWithData:[NSData dataWithContentsOfURL:your url]];

    dispatch_async(dispatch_get_main_queue(), ^{
        [imgview setImage:image];
    });
});

如果您不想使用任何庫,可以嘗試一下

嘗試使用以下代碼:

UIImageView *imgView = [[UIImageView alloc] init];
imgView.frame = CGRectMake(12.5, 12.5, 80, 80);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 UIImage *profileImage;
 profileImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:YOUR_URL_STRING]]];
dispatch_async(dispatch_get_main_queue(), ^{
                            imgView.image = profileImage;

                                          });


                             });

[cell.contentView addSubview:imgView];
(void)loadImg:(NSString *)url img :(UIImageView *)imgView{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
__weak UIImageView *imageV = imgView;
[imgView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"songRecDef"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    imageV.image = image;
    [imageV setNeedsLayout];
    NSLog(@"%@",response);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    [imageV setImage:[UIImage imageNamed:@"songRecDef"]];
    NSLog(@"%@",error);
}];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM