iOS:从网址加载图片

Cra*_*Dev 51 nsurl uiimageview uiimage ios

我需要从URL加载图像并将其设置在UIImageView中; 问题是我不知道图像的确切大小,那么我该如何正确显示图像?

fbe*_*rdo 114

只需使用UIImage的size属性,例如:

NSURL *url = [NSURL URLWithString:path];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[UIImage alloc] initWithData:data];
CGSize size = img.size;
Run Code Online (Sandbox Code Playgroud)

  • 我想你想要的是将UIImageView的contentMode设置为UIContentViewScaleAspectFit.但是看看文档. (2认同)

yeg*_*256 14

在快速:

var url = NSURL.URLWithString("http://www.example.com/picture.png")
var data = NSData(contentsOfURL : url)
var image = UIImage(data : data)
image.size // if you need it
Run Code Online (Sandbox Code Playgroud)


DCD*_*CDC 9

在快速使用期权:

var url:NSURL? = NSURL(string: imageString)
var data:NSData? = NSData(contentsOfURL : url!)
var image = UIImage(data : data!)
Run Code Online (Sandbox Code Playgroud)

  • 如果图像文件不在指定的图像字符串中,这将崩溃。 (2认同)
  • 使用 if let 语句!这是不安全的代码,如果 url 为 nil 会崩溃 (2认同)

Ash*_*k R 7

在SWIFT 3.0

主线程必须始终保持空闲状态,以便为用户界面和用户交互提供服务.

class ViewController: UIViewController {

@IBOutlet weak var imageView: UIImageView!

private func fetchImage() {
    let imageURL = URL(string: "https://i.stack.imgur.com/9z6nS.png")
    var image: UIImage?
    if let url = imageURL {
        //All network operations has to run on different thread(not on main thread).
        DispatchQueue.global(qos: .userInitiated).async {
            let imageData = NSData(contentsOf: url)
            //All UI operations has to run on main thread.
            DispatchQueue.main.async {
                if imageData != nil {
                    image = UIImage(data: imageData as! Data)
                    self.imageView.image = image
                    self.imageView.sizeToFit()
                } else {
                    image = nil
                }
            }
        }
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    fetchImage()
}

}
Run Code Online (Sandbox Code Playgroud)