Download image asynchronously

后端 未结 8 888
滥情空心
滥情空心 2020-12-03 19:46

I need to download an image from the web and display it in an ImageView. Presently I am using SDWebImage (It is an asynchronous image downloader wi

8条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-03 20:14

    I personally use the built in Grand Central Dispatch feature in iOS to download images from the server asynchronously.

    Below is a code I used to fetch photos from Flickr in one of my apps.

    In your image/photo class, have a function that is something like this:

    - (void)processImageDataWithBlock:(void (^)(NSData *imageData))processImage
    {
    NSString *url = self.imageURL;
    dispatch_queue_t callerQueue = dispatch_get_current_queue();
    dispatch_queue_t downloadQueue = dispatch_queue_create("Photo Downloader", NULL);
    dispatch_async(downloadQueue, ^{
        NSData *imageData = *insert code that fetches photo from server*;
        dispatch_async(callerQueue, ^{
            processImage(imageData);
        });
    });
    dispatch_release(downloadQueue);
    }
    

    In your Photo View Controller, you can call this function like this:

    - (void)viewWillAppear:(BOOL)animated
    {
    [spinner startAnimating];
    [self.photo processImageDataWithBlock:^(NSData *imageData) {
        if (self.view.window) {
            UIImage *image = [UIImage imageWithData:imageData];
            imageView.image = image;
            imageView.frame = CGRectMake(0, 0, image.size.width, image.size.height);
            scrollView.contentSize = image.size;
            [spinner stopAnimating];
        }
    }];
    }
    

提交回复
热议问题