2013-12-08 7 views
5

वर्तमान कोड:मास्क मनमाने ढंग से आकार बदलने योग्य UIImage साथ UIImageView आकार मुखौटा

self.backgroundImageView.image = [self.message imageOfSize:self.message.size]; // Random image, random size 

    UIImage *rightBubbleBackground = [[UIImage imageNamed:@"BubbleRight"] 
    resizableImageWithCapInsets:BubbleRightCapInsets 
    resizingMode:UIImageResizingModeStretch]; 

    CALayer *mask = [CALayer layer]; 
    mask.contents = (id)[rightBubbleBackground CGImage]; 

    mask.frame = self.backgroundImageView.layer.frame; 
    self.backgroundImageView.layer.mask = mask; 
    self.backgroundImageView.layer.masksToBounds = YES; 

यह ठीक से काम नहीं करता है। हालांकि मुखौटा लागू किया गया है, rightBubbleBackgroundself.backgroundImageView फिट करने के लिए सही ढंग से आकार बदलता नहीं है, भले ही इसमें कैप इन्सेट (BubbleRightCapInsets) सेट का आकार बदल रहा हो।

मूल छवि:

Original image

मास्क चित्र (rightBubbleBackground):

Mask

परिणाम:

Result

मुझे this answer मिला लेकिन यह केवल सममित छवियों के लिए काम करता है। शायद मैं अपने उपयोग के लिए उस उत्तर को संशोधित कर सकता हूं।

+0

मैं 'लगता mask.frame = self.backgroundImageView.layer.frame; 'mask.frame = self.background होना चाहिए ImageView.layer.bounds;'। यदि आपके फ्रेम का उपयोग सीमा के बराबर नहीं है तो आपके कोड का उपयोग मास्क की एक शिफ्ट के परिणामस्वरूप होगा। – PowerQian

उत्तर

10

मैं गलत था। उस उत्तर को विषम छवियों के लिए काम करने के लिए संशोधित किया जा सकता है। मैंने that answer पर थोड़ा सा काम किया और अपनी समस्या हल कर दी।

निम्नलिखित कोड बनाया मेरी टोपी सन्निवेश वाली मुखौटा परत के लिए काम करते हैं:

mask.contentsCenter = 
CGRectMake(BubbleRightCapInsets.left/rightBubbleBackground.size.width, 
BubbleRightCapInsets.top/rightBubbleBackground.size.height, 
1.0/rightBubbleBackground.size.width, 
1.0/rightBubbleBackground.size.height); 

परिणाम:

Result

+1

दोस्त। धन्यवाद!!! – Mahouk

+0

BubbleRightCapInsets का मूल्य क्या है .. मैं इस UIEdgeInsets BubbleRightCapInsets = UIEdgeInsetsMake (15.0f, 20.0f, 15.0f, 20.0f) का उपयोग करता हूं; –

+0

@MANCHIKANTIKRISHNAKISHORE मैंने तब से ऐप को फिर से डिजाइन किया है और अब इंससेट याद नहीं है। हालांकि, तीर के लिए खाते में, और शायद 'नीचे' के लिए आपको 'दाएं' के लिए अधिक मूल्य का उपयोग करना चाहिए। – duci9y

0

मैं था (का हिस्सा) एक ही समस्या - pixelated परत सामग्री यानी । मेरे लिए इसे CALAYER पर सामग्री स्केल मान सेट करके हल किया गया था - किसी कारण से कैलियर पर डिफ़ॉल्ट स्केल हमेशा 1.0 है, रेटिना उपकरणों पर भी।

यानी

layer.contentsScale = [UIScreen mainScreen].scale; 

इसके अलावा, आप एक आकार CAShapeLayer का उपयोग कर ड्राइंग और सोच रहे हैं कि अपने किनारों रेटिना उपकरणों पर एक छोटे दांतेदार देखो, कोशिश:

shapeLayer.rasterizationScale = [UIScreen mainScreen].scale; 
shapeLayer.shouldRasterize = YES; 
संबंधित मुद्दे