2009-09-28 29 views
6

मेरे पास विभिन्न आकारों के साथ बहुत सी पीएनजी है, और मैं उन्हें एक टेबल में लोड करना चाहता हूं। मेरे पास यह कोड है:केंद्रित छवियां धुंधली हैं

charImage.image = [self imageForId:g.charId glyphNr:g.glyphNr]; 
[charImage sizeToFit]; 
//charImage.contentMode = UIViewContentModeCenter; 
charImage.center = CGPointMake(30, 23); 

सबकुछ ठीक काम करता है सिवाय इसके कि मेरे पीएनजी धुंधले हैं। अगर मैं उन्हें केन्द्रित नहीं करता हूं, तो बेहद तेज़ हैं। वे सब वक्र से बने हैं। मैंने उन सभी को निर्यात नहीं किया था, इसलिए अभी भी एक निश्चित आकार और चित्रों को पहले से केंद्रित करने के साथ निर्यात करने का मौका है, लेकिन मैं जानना चाहता हूं कि मैं कुछ गलत या अधूरा कर रहा हूं या नहीं। वे धुंधले क्यों हैं?

मुझे लगता है कि .. किसी भी तस्वीर अपलोड करने के लिए संभव नहीं है

उत्तर

10

यह सुनिश्चित करें कि फ्रेम पूर्णांक में है कर देगा निर्देशांक:

int centerX = 30; 
int centerY = 23; 
CGSize size = charImage.frame.size; 
charImage.frame = CGRectMake((int)(centerX - size.width/2), 
          (int)(centerY - size.height/2), 
          size.width, size.height); 

इस और

charImage.center = CGPointMake(30, 23); 

के बीच अंतर यह है कि .center सेटर cou एलडी ने मूल को एक गैर-पूर्णांक बिंदु पर सेट किया है जब चौड़ाई या ऊंचाई गलत समानता का है। जैसा कि अन्य लोगों ने यहां कहा है, छवियों और पाठ को धुंधला दिखता है जब वे गैर-पूर्णांक निर्देशांक में होते हैं।

+0

बिल्कुल सही, बहुत बहुत धन्यवाद। –

+1

ध्यान दें कि यह भी तब होता है जब आपकी छवि का आकार ऊंचाई या चौड़ाई (जैसे 301x199 आकार) में "यहां तक" नहीं होता है। उस स्थिति में, UIViewContentModeCenter का उपयोग करके केंद्र का उपयोग किए बिना भी आपकी छवि को धुंधला कर सकते हैं। –

1

आप गणना का उपयोग कर सकते contentMode के बजाय निर्देशांक:

charImage.frame = CGRectMake(x,y,width,height)

+0

क्या आप कुछ निश्चित मूल्यों की गणना करने में मेरी सहायता कर सकते हैं? यह केंद्र संपत्ति के बराबर है लेकिन वे अभी भी निश्चित मान नहीं हैं, मुझे नहीं पता कि सीमाएं 46x46px: charImage.frame = CGRectMake ((46- [charImage सीमाएं] .size.width)/2 , (46- [charImage सीमाएं] .size.height)/2, [charImage सीमाएं] .size.width, [charImage सीमाएं] .size.height); –

+0

मुझे लगता है कि केवल एक स्थिति को बदलना ठीक है, न कि एक नए फ्रेम की गणना करने के लिए, है ना? लेकिन यकीन नहीं है कि संपत्ति क्या है। –

4

यह इसलिए होता है क्योंकि PNG का सब-पिक्सेल पदों रखा जाए । UIViewContentModeCenter के साथ आकार ToFit का उपयोग करना ऐसा होता है। जब आप UIViewContentModeCenter का उपयोग नहीं करते हैं, तो विचार (0.0, 0.0) पर रखे जाते हैं, और इसलिए धुंधला नहीं होता है।

आप कलंक से बचना चाहते हैं, तो सबसे पहले sizeToFit का उपयोग नहीं करते, तो यह प्रयोग छवि को केंद्र के लिए:

image.frame = CGRectMake(round(centerX - image.frame.size.width/2.0), 
         round(centerY - image.frame.size.height/2.0), 
         image.frame.size.width, 
         image.frame.size.height); 
+0

जैसा कि मैं आकार को समझता हूं टोफिट यूआईएममेज व्यू को यूआईएममेज का आकार लेने के लिए बनाता है, इसलिए सामग्री मोड का कोई प्रभाव नहीं पड़ता है, इसलिए मैंने टिप्पणी की। मैं UIImageView के स्केलिंग को संभाल नहीं सकता था इसलिए मैंने सीधे यूआईएममेज व्यू को केंद्र में पेश किया। charImage एक UIImageView –

+0

है आप सही हैं: आपको सामग्री मोड सेट करने की आवश्यकता नहीं है। लेकिन अगर आप आकार के लिए आकार लेते हैं, तो छवि फैल सकती है, और यह स्वयं ही छवि को धुंधला दिखाई दे सकती है। अद्यतन उत्तर देखें। – Felixyz

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