2011-10-08 8 views
46

में एक यूआरएल के साथ एक UIImage बनाएँ छवि फ़ाइल के साथ एक UIImage बनाने के लिए, मैं के रूप में नीचे दिए गए कोड का उपयोग करें:आईओएस

UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease]; 

मैं यूआरएल http://example.com/demo.jpg, कैसे करना है कि के साथ एक UIImage बनाना चाहते हैं ?

धन्यवाद

अद्यतन

enter image description here

+1

शायद इस परियोजना को देखना चाहते हैं: https://github.com/rs/SDWebImage – Intentss

उत्तर

147

यह एक तीन चरण की प्रक्रिया है। सबसे पहले आप उस यूआरएल को पकड़ने के लिए NSURL ऑब्जेक्ट तैयार करेंगे जिसे हम एक्सेस करने का प्रयास कर रहे हैं। कच्चे डेटा के रूप में नेटवर्क पर छवि प्राप्त करने के लिए हम इस URL को NSData क्लास विधि, +dataWithContentsOfURL: पर आपूर्ति करेंगे, फिर डेटा को एक छवि में बदलने के लिए UIImage पर +imageWithData: क्लास विधि का उपयोग करें।

NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"]; 
NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 
UIImage *image = [UIImage imageWithData:imageData]; 

कृपया ध्यान दें कि +dataWithContentsOfURL: एक तुल्यकालिक नेटवर्क अनुरोध निष्पादित करता है। यदि आप इसे मुख्य थ्रेड पर चलाते हैं, तो यह यूआई को अवरुद्ध करेगा जब तक कि नेटवर्क से छवि डेटा प्राप्त नहीं होता है। पृष्ठभूमि अभ्यास पर किसी भी नेटवर्क कोड को चलाने का सबसे अच्छा अभ्यास है। आप ओएस लक्षित कर रहे हैं आप कुछ इस तरह कर सकता है 4.0+ ...

NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"]; 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // Update the UI 
     self.imageView.image = [UIImage imageWithData:imageData]; 
    }); 
}); 
+1

सुझाव के लिए धन्यवाद, लेकिन मुझे कक्षा में कोड डालने के दौरान एक त्रुटि संदेश मिला, कृपया मेरा अद्यतन –

+0

टाइप करें । पहले dispatch_async() कॉल में एक अतिरिक्त समापन कोष्ठक था। –

+0

महान उत्तर के लिए बहुत बहुत धन्यवाद। :-) – kernix

7

यहाँ एक ही कोड स्विफ्ट में नज़र आ सकते हैं:

let image_url = NSURL("http://i.imgur.com/3yY2qdu.jpg") 

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 
dispatch_async(dispatch_get_global_queue(priority, 0)) { 
    // do some task 
    let image_data = NSData(contentsOfURL: image_url!) 

    dispatch_async(dispatch_get_main_queue()) { 
     // update some UI 
     let image = UIImage(data: image_data!) 
     self.imageView.image = image 
    } 
} 
+0

एक्सकोड 9 पर, एसिंक प्रेषण के लिए पसंदीदा स्विफ्ट वाक्यविन्यास 'DispatchQueue.global (qos: .default) .async {// block} ' – atineoSE

0

से छवि को लोड करने के लिए देख किसी को भी के लिए वेब निम्नलिखित पुस्तकालय सहायक हो सकता है:

https://github.com/rs/SDWebImage

यह एक UIImageView श्रेणी जो यूआरएल से async लोड हो रहा है और छवि कैशिंग संभालती है।