2012-11-07 13 views
26

में UIImage जोड़ें मुझे MapView के सबव्यूव के रूप में UIImageView जोड़ना होगा। ऐसा करने के लिए मैंने MapView के ऊपर एक परत बनाई। इस परत में मैं अपनी छवि रखना चाहता हूं, लेकिन मुझे एक सफेद आयत मिलता है और कुछ और नहीं। मेरी छवि दिखाई नहीं दे रही है।कैलियर

- (void)viewDidLoad 
{ 
    //...... 

    CALayer *layer = [CALayer layer]; 
    layer.backgroundColor = [[UIColor whiteColor] CGColor]; 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     layer.bounds = CGRectMake(self.mapView.bounds.origin.x, 
            self.mapView.bounds.origin.y, 80, 300); 
    } 
    else 
    { 
     layer.bounds = CGRectMake(self.mapView.frame.origin.x, 
            self.mapView.frame.origin.y, 150, 700); 
    } 

    layer.contents = (id)[UIImage imageNamed:@"myImage.png"]; 
    //the name is correct but in the output the image is not visible 

    [[self.mapView layer] addSublayer:layer]; 
    [layer setNeedsDisplay]; 
} 

उत्तर

6

मैं

[layer setNeedsDisplay]; 

मैं पता नहीं क्यों हटा दिया है, लेकिन यह काम करता है!

+2

मुझे लगता है कि setNeedsDisplay ने परत को सामग्री को फिर से निकालने और छवि को हटाने के लिए परत बनाई है। – Bastian

+0

यह मुझे भी काम करता है। धन्यवाद एड्रियाना। –

41

यह है

layer.contents = (id)[UIImage imageNamed:@"myImage.png"].CGImage; 

आप केवल सीधे एक परत, न कि एक UIImage में एक CGImage डाल सकते हैं होने के लिए:

इस कोड है।

3

आपको CALAYER का फ्रेम ठीक से सेट करने की आवश्यकता है, क्योंकि डिफ़ॉल्ट CGRectZero है।

77

यह भविष्य के दर्शकों के लिए एक सामान्य उत्तर है। यह मूल प्रश्न के विवरण के बजाय प्रश्न शीर्षक पर आधारित है।

एक CALayer करने के लिए एक UIImage कैसे जोड़ें

आप बस अपनी contents संपत्ति का उपयोग करके किसी दृश्य के layer के लिए एक छवि जोड़ सकते हैं:

myView.layer.contents = UIImage(named: "star")?.cgImage 
  • ध्यान दें कि UIImage आवश्यकताओं के परिवर्तित किया एक CGImage

आप अपनी परत में छवि जोड़ना चाहते हैं, तो आप इसे इस तरह कर सकते हैं:

let myLayer = CALayer() 
let myImage = UIImage(named: "star")?.cgImage 
myLayer.frame = myView.bounds 
myLayer.contents = myImage 
myView.layer.addSublayer(myLayer) 

उपस्थिति

ऊपर कोड इस तरह एक दृश्य पैदा करता है को संशोधित करना। हल्का नीला UIView है और गहरा नीला सितारा UIImage है।

enter image description here

आप देख सकते हैं, हालांकि, यह pixelated लग रहा है। ऐसा इसलिए है क्योंकि UIImageUIView से छोटा है, इसलिए इसे दृश्य भरने के लिए स्केल किया जा रहा है, जो डिफ़ॉल्ट है जिसे आप कुछ भी निर्दिष्ट नहीं करते हैं।

नीचे दिए गए उदाहरण परत की contentsGravity संपत्ति पर भिन्नताएं दिखाते हैं। कोड इस तरह दिखता है:

myView.layer.contents = UIImage(named: "star")?.cgImage 
myView.layer.contentsGravity = kCAGravityTop 
myView.layer.isGeometryFlipped = true 

आईओएस, आप ऊपर या नीचे गंभीरता के साथ कुछ भी कर रहे हैं true को isGeometryFlipped property सेट कर सकते हैं, अन्यथा यह आप क्या अपेक्षा के विपरीत होगा। (केवल गुरुत्वाकर्षण, खड़ी फ़्लिप नहीं है सामग्री प्रतिपादन। आप फ़्लिप किया जा रहा सामग्री के साथ परेशानी हो रही है, this answer देखें।)

हर contentsGravity सेटिंग के लिए नीचे दिए गए दो UIView उदाहरण हैं, एक दृश्य से UIImage बड़ा है और दूसरा छोटा है।इस तरह आप स्केलिंग और गुरुत्वाकर्षण के प्रभाव देख सकते हैं।

kCAGravityResize

यह डिफ़ॉल्ट है।

enter image description here

kCAGravityResizeAspect

enter image description here

kCAGravityResizeAspectFill

enter image description here

kCAGravityCenter

enter image description here

kCAGravityTop

enter image description here

kCAGravityBottom

enter image description here

kCAGravityLeft

enter image description here

kCAGravityRight

enter image description here

kCAGravityTopLeft

enter image description here

kCAGravityTopRight

enter image description here

kCAGravityBottomLeft

enter image description here

kCAGravityBottomRight

enter image description here

संबंधित

+0

ग्रेट उत्तर। लेकिन आप एक ही समय में kCAGravityResizeAspectFill और kCAGravityTop कैसे करते हैं? – tcurdt

+1

सामग्री को समायोजित करना सही अनुपात में खोजें चाल करता है। एक अन्य विकल्प UIImageView को UIView मास्क व्यू के रूप में उपयोग करना है। – tcurdt

0

myView.layer.contents = UIImage (नाम: 'स्टार') ?.cgImage

+2

कृपया अपने उत्तर में अधिक जानकारी प्रदान करें। यहां तक ​​कि यदि आपका उत्तर एक पूर्ण समाधान है, तो पूछताछकर्ता अधिक सीखेंगे यदि आप यह समझाने के लिए समय लेते हैं कि आपका कोड क्या करता है, और आप इसके साथ कैसे आए। – Jolta

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