मैं आईओएस 4 एप्लिकेशन विकसित कर रहा हूं।UIImageView, setClipsToBounds और मेरी छवियां उनके सिर को कैसे खो रही हैं
मैं एक UITableViewCell
पर एक UIImageView
पर इस कोड का उपयोग कर रहा हूँ:
cell.photo.contentMode = UIViewContentModeScaleAspectFill;
[cell.photo setClipsToBounds:YES];
मेरी छवियाँ विस्तृत से ज़्यादा लंबे, और जब मैं UIViewContentModeScaleAspectFill
सेट, छवियों UIImageView चौड़ाई के साथ चौड़ाई के अनुसार बदल जाता है। ऐसा करने से, छवि बड़ी हो जाती है कि UIImageView और मैं इसे UIImageView
के बाहर देखता हूं।
फिर, मुझे इसकी अनुमति देने के लिए setClipsToBounds:YES
का उपयोग करने की आवश्यकता नहीं है, लेकिन अब मेरी सभी छवियां अपना सिर खो देती हैं।
क्या UIViewContentModeScaleAspectFill और शीर्ष बाएं UIImageView
कोने के साथ केंद्र शीर्ष बाएं छवि कोने का उपयोग करने का कोई तरीका है? अगर मुझे छवि का एक हिस्सा खोना है, तो मैं अपने पैरों को खोना पसंद करता हूं।
अद्यतन
मैं sdWebImage ढांचे का उपयोग कर रहा है और मैं वादिम Yelagin जवाब का इस्तेमाल किया है और यह अब मेरी कोड है:
[cell.photo setImageWithURL:[NSURL URLWithString:entry.photo]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(UIImage *image) {
CGFloat scaleX = cell.photoBorder.bounds.size.width/image.size.width;
CGFloat scaleY = cell.photoBorder.bounds.size.height/image.size.height;
CGFloat scale = MAX(scaleX, scaleY);
cell.photo.frame = CGRectMake(0, 0, image.size.width * scale, image.size.height * scale);
cell.photo.image = image;
}
failure:nil];
मैं सभी छवियों को लोड करने के लिए इंतजार करना पड़ता है और सही सेल पर सही छवि देखने के लिए UITableView के आस-पास स्थानांतरित करें (ऐसा इसलिए है क्योंकि छवियों को कैश किया जाता है और यह तेज़ी से लोड होता है)।
इसके बजाय cell.photo.frame
और cell.photo.image
का उपयोग करके मुझे सही सेल प्राप्त करने के लिए indexPath.row
ब्लॉक करने की आवश्यकता है।
मैं UIImageView + WebCache करने के लिए एक नई विधि जोड़ सकते हैं:
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(void (^)(UIImage *image, NSInteger row))success failure:(void (^)(NSError *error))failure;
{
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
}
लेकिन अगर मैं ऐसा, मैं एक त्रुटि यहाँ प्राप्त:
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
क्योंकि अब सफलता प्रकार (void (^)(UIImage *image))
का नहीं है
क्या आप जानते हैं कि मैं इस समस्या को कैसे ठीक कर सकता हूं?
धन्यवाद कुछ करना है, लेकिन मैं अपने कोड समझ में नहीं आता, क्षमा करें। – VansFannel
आप 'UIGraphicsBeginImageContext' का उपयोग करके एक छवि संदर्भ बनाते हैं और उसके बाद मूल छवि को स्केल कर लेते हैं ताकि यह पूरे संदर्भ को भर सके लेकिन छवि का शीर्ष बायां (0 | 0) पर है। –