2012-07-31 25 views
19

मेरे पास एक कैलियर है और मैं इसे एक खिंचाव वाली छवि में जोड़ना चाहता हूं। अगर मैं सिर्फ कार्य करें:CALayer.contents में Stretchable UIImage को कैसे जोड़ें?

 _layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage; 

यह काम नहीं करेगा परतों 'डिफ़ॉल्ट contentGravity के बाद से kCAGravityResize है।

मैंने पढ़ा है कि यह सामग्री केंद्र का उपयोग करके पूरा किया जा सकता है लेकिन मुझे लगता है कि मैं अपने कैलियर में विस्तारित छवि को प्राप्त करने के लिए इसका उपयोग कैसे करूँगा।

किसी भी विचार का स्वागत है!

होरातियू

उत्तर

33

इस प्रश्न का उत्तर यह है। आइए कहें कि आपके पास एक खिंचाव वाली छवि है जो केवल चौड़ाई में फैली हुई है और ऊंचाई तय की गई है (सादगी के लिए)।

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     UIImage *stretchableImage = (id)[UIImage imageNamed:@"stretchableImage.png"]; 
     self.contents = (id)stretchableImage.CGImage; 

     self.contentsScale = [UIScreen mainScreen].scale; //<-needed for the retina display, otherwise our image will not be scaled properly 

     self.contentsCenter = CGRectMake(15.0/stretchableImage.size.width,0.0/stretchableImage.size.height,1.0/stretchableImage.size.width,0.0/stretchableImage.size.height); 
    } 
    return self; 
} 
: अपने परत

मान लिया जाये कि एक CALayer उपवर्ग अपने init विधि इस तरह दिखना चाहिए है

छवि 31px चौड़ाई (- - खिंचाव नहीं करता है, 1px फैला दिया जाएगा 15px तय आकार) है प्रलेखन के अनुसार

सामग्री सामग्री आयत के पास 0-1 के बीच मान होना चाहिए।

इकाई आयताकार (0.0,0.0) (1.0,1.0) के लिए डिफ़ॉल्ट परिणामस्वरूप पूरी छवि को स्केल किया गया। यदि आयताकार इकाई आयताकार के बाहर फैली हुई है तो परिणाम अपरिभाषित है।

यह है। उम्मीद है कि किसी और को यह उपयोगी लगेगा और यह कुछ विकास समय बचाएगा।

+0

मुझे यह उपयोगी लगता है। धन्यवाद! – duci9y

+1

छवि के पैमाने का उपयोग करना बेहतर है। –

+6

सुझाया गया समाधान आईफोन 6 प्लस पर असफल होगा यदि छवि का कोई @ 3x संस्करण मौजूद नहीं है। छवि की स्केल प्रॉपर्टी का उपयोग करना बेहतर है। 'self.contentScale = strechableImage.scale' फिर यह काम करेगा, भले ही छवि के सभी प्रकार (@ 2x @ 3x) मौजूद न हों। –