2012-06-10 25 views
44

से एक छवि लोड करें मुझे एक यूआरएल से एक छवि लोड करने और इसे UIImageView के अंदर सेट करने की आवश्यकता है; समस्या यह है कि मुझे छवि के सटीक आकार को नहीं पता है, तो मैं छवि को सही तरीके से कैसे दिखा सकता हूं? तेज मेंआईओएस: यूआरएल

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

क्यों क्या यह एक समस्या होगी? एक बार छवि डाउनलोड हो जाने के बाद आप इसका आकार जान लेंगे। आप छवि को इच्छित आकार को भी देख सकते हैं और छवि को फिट करने के लिए खींच सकते हैं। –

उत्तर

109

बस UIImage के आकार संपत्ति का उपयोग करते

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

या छवि दृश्य पर इच्छित आकार को सेट करें और छवि दृश्य को फिट करने के लिए इसे डाउनलोड करने के बाद बस छवि को खींचें। (आपको खिंचाव रखना चाहिए और पहलू रखना चाहिए, बाकी सब कुछ अजीब दिखता है) –

+0

आह ठीक है ... लेकिन मुझे नहीं पता कि मेरी छवि के लिए इस छवि का आकार कैसे बदलें; मैं एक लघु बनाने के लिए sholud और मेरे पास अपनी छवि दृश्य (अधिकतम 236 चौड़ाई और ऊंचाई के लिए अधिकतम 60) के लिए बहुत सी जगह नहीं है; इस जगह में मुझे यूआरएल से छवि लोड करनी चाहिए, लेकिन यह आनुपातिक होना चाहिए ... – CrazyDev

+2

मुझे लगता है कि आप जो चाहते हैं वह सामग्री को सेट करना है UIImageView का संदेश UIContentViewScaleAspectFit पर। लेकिन दस्तावेज़ीकरण पर एक नज़र डालें। – fbernardo

13

: स्विफ्ट में optionals का उपयोग कर के बारे में

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

:

+1

के साथ यह छवि क्रैश निर्दिष्ट छवि स्ट्रिंग पर नहीं है तो यह क्रैश हो जाएगा। – Suragch

+0

अगर कथन देता है तो इसका उपयोग करें! यह असुरक्षित कोड है और यूआरएल शून्य होने पर दुर्घटनाग्रस्त हो जाएगा –

3

स्विफ्ट 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() 
} 

} 
0

किंगफिशर पुस्तकालय के साथ अतुल्यकालिक छवि डाउनलोड करने के लिए आप इस चरण को, यूआरएल का पालन कर सकते हैं: https://github.com/onevcat/Kingfisher:

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

तुम भी डिफ़ॉल्ट के साथ छवि डाउनलोड कर सकते हैं URLSession.shared.dataTask

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^