2012-10-17 6 views
9

इससे पहले कि मैं वेब से चित्रों का एक बहुत लाने, और वे आकार के सभी प्रकार के होते हैं - वे, बड़ा या छोटा आदि हो सकता है ..SDWebImage प्रक्रिया छवियों कैशिंग

तो मैं उन्हें आकार बदल सकते हैं जब मैं उन्हें में प्रदर्शित सेल लेकिन यह अक्षम है। एसडीवेब इमेज ने डिस्क पर बड़ी छवियों को संग्रहीत करने और प्रत्येक सेल के लिए आकार बदलने के बजाय उन्हें आकार देने और उन्हें आकार बदलने के बाद उन्हें आकार देने के लिए बेहतर तरीका है।

तो मैं एसडीवेब इमेज के साथ ऐसा कैसे कर सकता हूं, या मुझे कक्षा में थोड़ा सा हैक करना है?

उत्तर

4

मुझे आपके जैसा ही समस्या थी, और मैंने पहले एसडीवेब इमेज को ट्वीक करने का प्रयास किया, लेकिन समस्या का समाधान करने वाले अपने स्वयं के घटक का निर्माण समाप्त हो गया। आप इसे यहां देख सकते हैं: https://github.com/adig/RemoteImageView

+0

यह बहुत अच्छा है! पुस्तकालय पर अच्छा काम। कुछ परेशानियां हैं, जैसे छवियों को प्रत्येक रीलोडडाटा संदेश पर पुनः लोड करना, या छवियों को प्रत्येक तालिका स्क्रॉल पर फिर से दिखाना। आप इसे देख सकते हैं। धन्यवाद और बधाई! – Devfly

+0

प्रतिक्रिया के लिए धन्यवाद। यदि आप छवि लोड पर एनीमेशन अनुक्रम का जिक्र कर रहे हैं तो आप एनिमेट संपत्ति का उपयोग कर अक्षम कर सकते हैं। – adig

+0

हाँ, यह बहुत अच्छा है, मैंने इसे पहले ही लागू कर दिया है। – Devfly

24

एसडीवेब इमेज डेवलपर ओलिवियर पोइट्रे ने मेरे लिए इस प्रश्न का उत्तर here दिया।

आप SDWebImageManagerDelegate प्रोटोकॉल को लागू करें और फिर इस तरह साझा प्रबंधक के प्रतिनिधि के रूप में सेट करने के लिए है:

SDWebImageManager.sharedManager.delegate = self; 

using the imageManager:transformDownloadedImage:withURL: instance method. 

More information.

मेरे लिए पूरी तरह से काम किया।

+1

यह कमाल है! मुझे सही दिशा में इंगित करने के लिए बहुत बहुत धन्यवाद। – kleo

+0

क्षमा करें नहीं मिला। मैं UIImageView + WebCache.h क्लास का sd_setImageWithURL का उपयोग कर रहा हूं: (NSURL *) यूआरएल प्लेसहोल्डर इमेज: (UIImage *) प्रत्येक सेल की छवि के लिए प्लेसहोल्डर विधि। मुझे क्या करना चाहिए, क्या आप कृपया आम आदमी के शब्दों में बता सकते हैं। –

0

SDWebImage 3.8.2

तो UIImageView श्रेणी sd_setImageWithURL का उपयोग कर। मैं एक UIImageView श्रेणी (एक्सटेंशन) स्विफ्ट 3 में उस्ताद के जवाब पर

func modifiedImageFromUrl(url: NSURL?) { 
    self.sd_setImageWithURL(url) { (image, error, cacheType, url) in 
     if cacheType == SDImageCacheType.None && image != nil { 
      dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { 
       let modifiedImage = // modify image as you want 

       dispatch_async(dispatch_get_main_queue()) { 
        SDWebImageManager.sharedManager().saveImageToCache(modifiedImage, forURL: url) 

        self.image = modifiedImage 
       } 
      } 
     } 
    } 
} 
0

विस्तार बनाया है:

myImageView.sd_setImage(with: imageUrl){ (image, error, cacheType, url) in 
    guard let image = image, cacheType == .none else { return } 

    DispatchQueue.global(qos: .userInitiated).async { 
     let modifiedImage = myImageProcessor(image) 
     SDWebImageManager.shared().saveImage(toCache: modifiedImage, for: imageUrl) 
     DispatchQueue.main.async { 
      myImageView.image = modifiedImage 
      myImageView.setNeedsDisplay() 
     } 
    } 
}