iOS
छवियाँ async लोड करें
खोज…
सबसे आसान तरीका
इसे बनाने का सबसे सरल तरीका है आलमोफायर और इसके UIImageViewExtension का उपयोग करना । हमें जो चाहिए वह एक सेलव्यू के साथ एक टेबलव्यू है जिसमें एक imageView है और इसे imageView
कहते हैं।
CellForRowAt: tableView के कार्य में हम चित्र डाउनलोड करेंगे और निम्नलिखित तरीके से सेट करेंगे:
let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!
imageView.af_setImage(withURL: url, placeholderImage: placeholderImage)
Url को उस छवि को इंगित करना चाहिए जिसे आप डाउनलोड करना चाहते हैं और प्लेसहोल्डर छवि एक संग्रहीत छवि होनी चाहिए। हम तो कहते हैं af_setImage
पर विधि imageView
जो दिए गए URL के और डाउनलोड प्लेसहोल्डर छवि दिखाया जाएगा दौरान छवि डाउनलोड करता है। जैसे ही छवि डाउनलोड की जाती है अनुरोधित छवि प्रदर्शित होती है
जांचें कि डाउनलोड के बाद भी सेल दिखाई दे रहा है
कभी-कभी सेल प्रदर्शित होने की तुलना में डाउनलोड अधिक समय लेता है। इस स्थिति में ऐसा हो सकता है, कि डाउनलोड की गई छवि गलत सेल में दिखाई गई हो। इसे ठीक करने के लिए हम UIImageView Extension का उपयोग नहीं कर सकते हैं।
हम अभी भी अल्मोफायर का उपयोग कर रहे हैं लेकिन हम छवि को प्रदर्शित करने के लिए पूरा हैंडलर का उपयोग करेंगे।
इस परिदृश्य में हमें अभी भी एक सेल दृश्य के साथ एक तालिका दृश्य की आवश्यकता है जिसमें एक छवि दृश्य है। CellForRowAt: विधि में हम निम्नलिखित कोड के साथ चित्र डाउनलोड करेंगे:
let placeholderImage = UIImage(named: "placeholder")!
imageView.image = placeholderImage
let url = URL(string: "https://httpbin.org/image/png")!
Alamofire.request(url!, method: .get).responseImage { response in
guard let image = response.result.value else { return }
if let updateCell = tableView.cellForRow(at: indexPath) {
updateCell.imageView.image = image
}
}
इस उदाहरण में हम पहली बार छवि को प्लेसहोल्डर छवि पर सेट करते हैं। बाद में हम Alamofire के request
विधि के साथ छवि डाउनलोड करते हैं। हम url को पहले तर्क के रूप में पास करते हैं और चूंकि हम केवल उस छवि को प्राप्त करना चाहते हैं जो हम .get
HTTP विधि का उपयोग करेंगे। चूंकि हम एक छवि डाउनलोड कर रहे हैं, हम चाहते हैं कि प्रतिक्रिया एक छवि हो इसलिए हम .responseImage
पद्धति का उपयोग करते हैं।
छवि डाउनलोड होने के बाद बंद होने का आह्वान किया जाता है और सबसे पहले हम यह सुनिश्चित करते हैं कि डाउनलोड की गई छवि वास्तव में मौजूद है। तब हम यह सुनिश्चित करते हैं कि सेल अभी भी जाँच करके दिखाई दे रहा है कि सेलफ़ोर्रॉ (पर: इंडेक्सपैथ) शून्य वापस नहीं आता है। यदि ऐसा नहीं होता है, तो यदि हम हाल ही में डाउनलोड की गई छवि को असाइन नहीं करते हैं।
यह अंतिम यदि स्टेटमेंट यह सुनिश्चित करता है कि सेल अभी भी दिखाई दे रहा है यदि उपयोगकर्ता सेल पर पहले से ही स्क्रॉल किया गया है तो अपडेट शून्य होगा और यदि स्टेटमेंट एनआईएल रिटर्न करता है। यह हमें एक कक्ष में गलत छवि प्रदर्शित करने से रोकने में मदद करता है।