在iOS中从URL加载UIImage

5

我正在尝试通过URL加载UIImage,并使用completionplaceholder图像,但是既没有UIImage也没有占位符UIImage被加载。

这是我的代码:

  NSURL *url = [NSURL URLWithString:@"http://assets.gearlive.com/tvenvy/blogimages/stewiegriffin.jpg"];
  NSURLRequest *request = [NSURLRequest requestWithURL:url];

  [self.imageView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"bg.png"]

      success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
          imageView.image = image;
      } 
      failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {}
   ];

1
你的代码看起来是正确的。只需直接设置占位符 self.imageView.image = [UIImage imageNamed:@"bg.png"];,以确保你的图像视图可见并且设置图像有效。 - Swapnil Luktuke
如果直接设置图像无效,请设置图像视图的背景颜色 self.imageView.backgroundColor = [UIColor redColor]; 并运行应用程序以确保图像视图实际上可见于屏幕上。 - Swapnil Luktuke
@AdhRadwan 我已经发布了答案,请尝试并告诉我结果。 - Ashok Londhe
谢谢@lukya,你的评论真的很有帮助。 - Ahd Radwan
4个回答

15

尝试使用以下代码获取图像...

代码:

NSURL *url = [NSURL URLWithString:@"http://www.fnordware.com/superpng/pnggrad16rgb.png"];

NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];

[self.imageview1 setImage:image];    

注意: 我使用了测试网址。您可以使用您的网址。

更新: Swift 3.0 代码

let url = URL(string: "http://www.fnordware.com/superpng/pnggrad16rgb.png")
    do {
        let  data = try Data(contentsOf: url!)
        var image = UIImage(data: data)
        self.imageView.image = image
        print(image)
    } catch {

    }

注意: 在 Xcode 版本 7.1 及以上版本中,您需要设置 ATS(应用程序传输安全性)。要设置 ATS,您需要在 info.plist 文件中编写以下代码。 确保图像的 URL 不为空。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

在Playgrounds中测试过了,转换成Swift 3,完美运行!谢谢! - Simon
@Simon 感谢您的反馈,我已经更新了答案,并添加了 Swift 的代码。 - Ashok Londhe

13

使用 AFNetworking,您可以设置占位图像,即使URL不正确也可以。当您在tableview或collection view中加载图像时,这更加高效。

导入 UIImageView+AFNetworking.h

#import "UIImageView+AFNetworking.h"

使用以下代码:

NSString *url1=@"http://www.fnordware.com/superpng/pnggrad16rgb.png";
[self.image setImageWithURL:[NSURL URLWithString:url1] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

您可以从GitHub下载它。


我之前用过SDImage,从来不知道AF也可以做到这一点...谢谢。 - Nikhil Manapure
我能否使用图像URL作为占位符图像? - Jignesh B
对于任何未来的开发人员,导入不再是必要的。 - C-H-E-F

3

看看AsyncImageView。据我所知,这是最好的异步图像加载器。你只需将图片URL设置为imageview,其余的都会被处理,包括缓存。


1
这个非常易于使用。 - thanhbinh84

1

我找到了问题

我的代码正常运行。

问题出在我的代码中,ImageViewnil。 感谢大家。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接