AFNetworking setImageWithURL:placeholderImage,其中占位符也来自url

时间:2014-04-29 09:58:01

标签: ios7 uiimageview afnetworking

更新

在尝试寻找解决方案时,我碰巧注意到以下两个问题:

我会调查使用这两个帖子,如果它有用的话会更新。

原始帖子

我得到的这个水平Feed每页包含1个项目。每个项目都包含一些文字信息和我从网址中提取的背景图片。

由于背景图像质量很高,下载可能需要一些时间,所以我发现我需要一个占位符。我想使用的占位符是背景图像的极度模糊,质量非常低的版本,这意味着我需要改变心爱的AFNetworking方法:[bg setImageWithURL: placeholderImage:] - 一些知道如何接受的方法来自url的占位符(假设占位符图像的重量小于原始大小的占位符。)

总结一下,我的问题是:如何从网址获取图片并使用占位符,其中占位符图片也来自网址?

我尝试的事情:

  • 创建另一个UIImageView *placeholder并在其上使用[placeholder setImageWithURL:]方法和占位符的网址,然后使用placeholder.image作为[bg setImageWithURL: placeholderImage:]调用的占位符

  • 使用[placeHolderImage setImageWithURLRequest:placeholderImage:success:failure:]方法,并在调用[bg setImageWithURL:]方法的成功块中。

1 个答案:

答案 0 :(得分:1)

显然我走在正确的轨道上,由于缺乏关注,它无法正常工作。 (保留周期有问题) 使用我在问题中提供的两个链接,我最终设法通过对占位符使用setImageWithURLRequest:placeholderImage:success:failure:来解决问题,并在成功块上再次使用setImageWithURLRequest:placeholderImage:success:failure:方法 - 这次是原始图片。

我将提供我的解决方案的代码片段 - 可能在将来帮助某人:

    //Protect against retain cycle
    __weak UIImageView *weakBg = bg;

    //get the placeholder - note the placeholderImage parameter is nil (I don't need a placeholder to the placeholder
    [bg setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:placeholderURL]]
              placeholderImage: nil
                       success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                           UIImageView *strongBg = weakBg; // Make local strong reference to protect against race conditions
                           if (!strongBg) return;

                           //Protect against retain cycle
                           __weak UIImageView *weakBg = strongBg;

                         //Get the original bg with the low quality bg as placeholder
                           [strongBg setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:originalBgImageURL]]
                                           placeholderImage:image
                                                    success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                               UIImageView *strongBg = weakBg; // Make local strong reference to protect against race conditions
                               if (!strongBg) return;

                               //Do stuff

                           } failure:NULL];
                       } failure:NULL];