2012-06-10 26 views
44

Bir URL'den bir görüntü yüklemem ve bir UIImageView içine koymam gerekiyor; Sorun şu ki resmin tam boyutunu bilmiyorum, sonra görüntüyü nasıl doğru gösterebilirim?iOS: bir görüntüyü url'den yükleyin

+2

Neden URLSession.shared.dataTask

func imageFromUrl(_ urlString: String) { if let url = URL(string: urlString) { ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) { (image, error, url, data) in DispatchQueue.main.async { self.imageView.image = image } } } } 

Ayrıca varsayılan görüntü indirebilirsiniz: https://github.com/onevcat/Kingfisher:

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

cevap

109

Sadece örneğin, UIImage boyutu özelliğini kullanın:

NSURL *url = [NSURL URLWithString:path]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
UIImage *img = [[UIImage alloc] initWithData:data]; 
CGSize size = img.size; 
+0

Ya da görüntü görünümünde istediğiniz boyutu ayarlayın ve görüntüyü görüntü görüntüsüne sığdırmak için indirdikten sonra sadece gerdirin. (Gerdirmeli VE yönünü korumalısınız, her şey garip görünüyor) –

+0

ah tamam ... ama bu resmi resmim için yeniden boyutlandırmayı anlamıyorum. Bir minyatür oluşturmaya çalıştım ve imageView'im için çok fazla alanım yok (maksimum 236 genişlik ve yükseklik için maksimum 60); Bu alanda url'den görüntü yüklemeliyim ama orantılı olmalı ... – CrazyDev

+2

UIImageView'in contentMode'unu UIContentViewScaleAspectFit olarak ayarlamak istediğinizi düşünüyorum. Ama belgelere bir bakın. – fbernardo

13

hızlı olarak:

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 
9

Swift in kullanarak seçeneklere ilişkin: SWIFT İÇİNDE

var url:NSURL? = NSURL(string: imageString) 
var data:NSData? = NSData(contentsOfURL : url!) 
var image = UIImage(data : data!) 
+1

ile Görüntü dosyası belirtilen görüntü dizgesinde değilse, çökecektir. – Suragch

+0

İfadelerin yapılıp yapılmadığını kullanın! Bu güvenli olmayan bir koddur ve URL'nin sıfır olması durumunda kilitlenir –

3

3,0

Ana iş parçacığının her zaman boş kalması gerekir, böylece kullanıcı arabirimi ve kullanıcı etkileşimleri sunulur.

func imageFromUrl(_ urlString: String) { 
     if let url = URL(string: urlString) { 
      let request = URLRequest(url: url) 
      URLSession.shared.dataTask(with: request) {(data,response,error) in 
       if let imageData = data as Data? { 
        if let img = UIImage(data: imageData){ 
         DispatchQueue.main.async { 
         self.imageView.image = img 
         } 
        } 
       } 
      } 
     } 
    } 
0

bu adımı, url takip edebilirsiniz Kingfisher kütüphanesi ile uyumsuz görüntü indirmek için Bu bir sorun olabilir mi? Görüntü indirildikten sonra boyutunu bileceksiniz. Görüntü görünümünü istediğiniz boyuta getirebilir ve görüntüyü sığacak şekilde genişletebilirsiniz.
İlgili konular