2011-12-29 10 views
25

का उपयोग करते समय resizableImageWithCapInsets का उपयोग करते समय: UIButton के लिए एक छवि बनाने के लिए केवल सामान्य स्थिति (राज्य सेटबैकग्राउंड इमेज का उपयोग कर छवि सेट करता है: forState:) काम करता है। अन्य सभी राज्य तैयार छवि के बजाय एक अंतर दिखाते हैं। UIButton का कहना है कि यदि किसी विशेष स्थिति के लिए कोई छवि सेट नहीं की गई है, तो सामान्य स्थिति छवि का उपयोग अक्षम और चयनित राज्यों के ओवरले के साथ किया जाएगा।resizableImageWithCapInsets का उपयोग करना: बटन के लिए छवि केवल राज्य सेट के लिए काम करती है, अन्य राज्य एक "अंतराल"

enter image description here

यहाँ चयनित राज्य है: यहाँ

enter image description here

और स्रोत छवि है:

enter image description here

यहाँ सामान्य स्थिति हैयह स्पष्ट रूप से प्रदान की गई आकार बदलने योग्य छवि का उपयोग कर रहा है, लेकिन छवि आकार बदल रहे क्षेत्र को चित्रित नहीं कर रही है। (आप बाएं और दाएं किनारों को देख सकते हैं लेकिन मध्य क्षेत्र जो फैलाया जाना है, खींचा नहीं गया है)।

दिलचस्प बात यह है कि खिंचाव इमेज विथलफ्ट कैपविड्थ: टॉप कैपहाइट: काम करता है। अब यह आईओएस 5 में एक बहिष्कृत विधि है, लेकिन नए एपीआई में दिखाए गए अंतर के साथ, मैं इसका उपयोग कर अटक सकता हूं।

मुझे पता है कि मैं प्रत्येक राज्य के लिए और अधिक छवियां प्रदान कर सकता हूं लेकिन यह उस उद्देश्य को हरा देता है जिसे मैं स्मृति पदचिह्न को कम करने की कोशिश कर रहा हूं और साथ ही अपने ग्राफिक्स डिजाइनर पर अतिरिक्त निर्भरता जोड़ता हूं जिसे मैं टालना चाहता हूं।

// This is the gist of the code being used 
UIImage* image = [UIImage imageNamed:@"button.png"]; 
UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height/2, image.size.width/2, image.size.height/2, image.size.width/2); 
image = [image resizableImageWithCapInsets:insets]; 
[self.button setBackgroundImage:image forState:UIControlStateNormal]; 
// Even doing the following results in the same behaviour 
[self.button setBackgroundImage:image forState:UIControlStateSelected]; 
+0

कोड स्निपेट जोड़ा गया और स्क्रीनशॉट होस्ट किया गया (पाठ्यक्रम के प्रासंगिक क्षेत्र में फसल) – NSProgrammer

+0

यह अजीब है ... मुझे पसंद है अगर हम कर सकते हैं बटन.png देखने के लिए। –

+0

http://i40.tinypic.com/ea35zq.png - मैं सिर्फ एक नया उपयोगकर्ता के रूप में एक पद के लिए 2 लिंक जोड़ सकते हैं, लेकिन यहाँ sourece – NSProgrammer

उत्तर

34

आप छवि कैपिंग के लिए अपने इन्सेट ठीक से नहीं बना रहे हैं। मैंने आपकी समस्या का पुनरुत्पादन किया है और सही इन्सेट का उपयोग करके इसे सही किया है।

अपने वर्तमान कोड के साथ, आप छवि ऊंचाई और चौड़ाई के आधे हिस्से के कैप्स बना रहे हैं - इससे आपको 0x0 पिक्सेल के "खिंचाव" क्षेत्र के साथ छोड़ दिया जाता है - इसलिए आपको बीच में कुछ भी नहीं मिलता है।

यह बटन की सामान्य स्थिति में गलत क्यों नहीं दिख रहा है, मुझे यकीन नहीं है - शायद यूआई बटन में चीजों को ठीक करने के लिए कुछ ऑप्टिमाइज़ेशन बनाया गया है या ऑटो-स्टैचच यदि आप खिंचाव की आपूर्ति नहीं करते हैं छवि, और यह अन्य राज्यों पर लागू नहीं है।

कैप्स को उस छवि के क्षेत्र को परिभाषित करना माना जाता है जिसे विस्तारित नहीं किया जाना चाहिए। आपके बटन.png छवि के मामले में, यह बाएं और दाएं किनारे पर 6 पिक्सल है, और ऊपर और नीचे से 16 पिक्सल है। यह काफी मानक नहीं है, आपको अपने ग्राफिक्स डिजाइनर को यह बताना चाहिए कि (कम से कम बाएं-दाएं जो सबसे आम खींच रहा है) आपके पास केंद्र में केवल 1 पीएक्स क्षेत्र होना चाहिए, हालांकि इससे परिणाम प्रभावित नहीं होता है। यदि आपके पास 1 पीएक्स खिंचाव क्षेत्र है तो आप छवि के आकार से कैप्स को प्राप्त करके अपने कोड को मानकीकृत कर सकते हैं क्योंकि आपने अपने प्रश्न में करने की कोशिश की है (प्रत्येक टोपी (image.size.height - 1)/2 शीर्ष/नीचे के लिए है, लेकिन बाएं/दाएं चौड़ाई के साथ)।

UIEdgeInsets insets = UIEdgeInsetsMake(16, 6, 16, 6); 
image = [image resizableImageWithCapInsets:insets]; 
+0

+1 मेरी तर्क button.png निश्चित रूप से है कि के लिए खाते में नहीं था। किनारे के मूल्य को कम करके। 'truncf ((image.size.height - 1)/2.0) 'मेरी छवि ठीक से बदलती है। Jrturton – NSProgrammer

+1

के लिए कुडोस ग्रेट कैच, यह ध्यान दिया जाना चाहिए कि आईओएस 6 पिक्सेल दोहराएगा जहां दो इन्सेट मिलेंगे जिसके परिणामस्वरूप आईओएस 5 केवल बग जैसा दिखता है। – tapi

0

मैं भी iOS5 पर आकार बदलने योग्य छवियों का उपयोग करते समय समस्याओं का सामना कर रहा था:

अपने बटन पर सही चित्र प्राप्त करने के लिए, खींचे छवि बनाने के लिए निम्न कोड का उपयोग करें। यह पता चला है कि यदि आपका बटन "RountedRect" प्रकार का है और आप पृष्ठभूमि छवियों में हेरफेर करते हैं, तो आकार बदलने योग्य छवियां अपेक्षित व्यवहार नहीं करेंगे।(आईओएस 6 आपके नए बटन प्रकार को मानकर और आवश्यकतानुसार समायोजित करके ठीक है।)

+0

वर्णित समस्या "कस्टम" बटन शैली पर थी। – NSProgrammer