2012-06-10 22 views
5

प्रस्तुत नहीं होता है। मुझे CALayer.contents में एक छवि दिखाने के लिए एक दुष्ट समय है। ऐसा लगता है कि यह सीधे आगे बढ़ता है लेकिन मैं छवि को प्रस्तुत करने के लिए कोई फर्क नहीं पड़ता कि मैं क्या करता हूं। CALayer ठीक है क्योंकि मैं इसके पृष्ठभूमि रंग और कोने त्रिज्या देख सकता हूं, लेकिन छवि लोड नहीं होगी।CALayer.contents में UIImage को चित्रित करने से छवि डेटा

enter image description here

क्या आप यहाँ देख रहे हैं एक मुखौटा लागू किए गए एक CAGradientLayer उपवर्ग है। आंतरिक वर्ग वह स्थान है जहां मैं छवि को दिखाना चाहता हूं, और इसे CAGradientLayer सबक्लास के उपनगर के रूप में जोड़ा जाता है।

इसे सेट करने के लिए कोड बहुत सरल है। init में:

- (void)setImage:(UIImage *)image { 
    self.imageLayer.contents = (id)image.CGImage; 
    [self.imageLayer setNeedsDisplay]; 
} 
अंत में

, setFrame भीतर:

self.imageLayer = [CALayer layer]; 
self.imageLayer.cornerRadius = kDefaultCornerRadius; 
self.imageLayer.backgroundColor = [UIColor darkGrayColor].CGColor; 
[self addSublayer:self.imageLayer]; 
फिर

पर बाद में, मैं छवि सेट

CGFloat imageSize = self.bounds.size.width - 2*kDefaultMargin; 
[self.imageLayer setBounds:CGRectMake(0.0, 0.0, imageSize, imageSize)]; 
[self.imageLayer setPosition:CGPointMake(self.bounds.size.width/2.0f, kDefaultMargin + imageSize/2.0f)]; 
[self.imageLayer setNeedsDisplay]; 

बातें मैं पहले से ही पता है या जाँच कर ली है:

  1. परत ओबीवी है दृश्यमान रूप से स्पष्ट रूप से स्पष्ट रूप से स्पष्ट रूप से जोड़ा गया।
  2. छवि जोड़ा और काम करता है। [UIImage imageNamed:@"info.png"] कोड में कहीं और इस्तेमाल किया जा रहा है और वास्तव में शो और छवि। यह 16x16 पर 1x और 32x32 पर 2x
  3. कोड को सही तार्किक क्रम में कहा जा रहा है: init, setImage:, setFrame;

यहां क्या हो रहा है?

+0

[इस सवाल] में समान समस्या और समाधान (http://stackoverflow.com/q/10060912/1218876)। '[Self.imageLayer setNeedsDisplay]' को कॉल न करें। –

+0

वास्तव में, कृपया इसे एक उत्तर दें, कोई टिप्पणी नहीं, इसलिए मैं इसे स्वीकार कर सकता हूं। – coneybeare

उत्तर

13

निकालें इस लाइन:

[self.imageLayer setNeedsDisplay]; 

-setNeedsDisplay एक परत है कि यह उसकी सामग्री को पुनः बनाने की जरूरत बताता है। चूंकि आपने पहले ही परत के लिए सामग्री प्रदान की है, इसलिए आप नहीं चाहते हैं कि सीए उस सामग्री को त्यागें और प्रतिस्थापन मांगें।