Renish Dadhaniya
Renish Dadhaniya

Reputation: 10752

How to asynchronously download images in ios?

I want to first create imageview onto the scroll view.there i set placeholder image or give Background color of imageview.so all image view are display.

- (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];
        });
    }
}

Upvotes: 0

Views: 2059

Answers (3)

Eric Loo
Eric Loo

Reputation: 1

(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);
}];
}

Upvotes: 0

wootage
wootage

Reputation: 936

You can use SDWebImage to do it.It is pretty easy to use

Edit :

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];
    });
});

You can try this if you don't want to use any library

Upvotes: 1

Kisel Alexander
Kisel Alexander

Reputation: 750

Try to use this code:

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];

Upvotes: 1

Related Questions