2012-04-18 12 views
8

मैं पाया गया हर एक तरीका कोशिश कर रहा हूं लेकिन मैं इसे बनाने में सक्षम नहीं था। मैं बस गोल पैटर्न के साथ एक लेबल बनाना चाहता हूं, पृष्ठभूमि पैटर्न के साथ एक बूंद छाया। छाया केवल तभी काम करती है जब मैं गोल कोनों को नहीं चाहता। मैं उन्हें दोनों एक साथ नहीं मिल सकता!गोलाकार कोनों, ड्रॉप छाया और पृष्ठभूमि पैटर्न के साथ एक UILabel

label.text = msg; 
label.textAlignment = UITextAlignmentCenter; 
label.frame = CGRectMake(20,10,280,40); 
label.backgroundColor 
    = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"msg_box_bg.png"]]; 

[label.layer setCornerRadius:10]; 
[label.layer setMasksToBounds:NO]; 

/* Shadow */ 
label.layer.shadowColor = [UIColor blackColor].CGColor; 
label.layer.shadowOpacity = 0.6; 
label.layer.shadowOffset = CGSizeMake(0,0); 
label.layer.shadowRadius = 3; 

यह मैं गोलाकार कोनों के बिना छाया देता है:

यहाँ छाया के साथ मेरी कोड है। लेकिन अगर मैं

यह मुझे बिना छाया के गोलाकार कोनों देगा। मैं सलाह एक छाया पथ का उपयोग करने के लिए लिया है, तो छाया पथ के साथ कोड इस तरह दिखता है:

label.text = msg; 
label.textAlignment = UITextAlignmentCenter; 
label.frame = CGRectMake(20,10,280,40); 
label.backgroundColor 
    = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"msg_box_bg.png"]]; 

[label.layer setCornerRadius:10]; 
[label.layer setMasksToBounds:YES]; 

/* Shadow */ 
label.layer.shadowColor = [UIColor blackColor].CGColor; 
label.layer.shadowOpacity = 0.6; 
label.layer.shadowOffset = CGSizeMake(0,0); 
label.layer.shadowRadius = 3; 
label.layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:label.frame cornerRadius:10]CGPath]; 
label.layer.shouldRasterize = YES; 

इस कोड को दे मुझे कोनों लेकिन कोई छाया गोल करता है। कोई सुझाव?

धन्यवाद!

+0

http://stackoverflow.com/questions/3690972/why-maskstobounds-yes-prevents-calayer-shadow –

उत्तर

11

enter image description here

मैं परिणाम आप के बाद कर रहे थे प्राप्त करने के लिए नीचे दिए गए कोड का इस्तेमाल किया।

CGSize size = CGSizeMake(280, 40); 

/** Shadow */ 
CALayer *shadowLayer = [CALayer new]; 
shadowLayer.frame = CGRectMake(20,100,size.width,size.height); 
shadowLayer.cornerRadius = 10; 

shadowLayer.backgroundColor = [UIColor clearColor].CGColor; 
shadowLayer.shadowColor = [UIColor blackColor].CGColor; 
shadowLayer.shadowOpacity = 0.6; 
shadowLayer.shadowOffset = CGSizeMake(0,0); 
shadowLayer.shadowRadius = 3; 

/** Label */ 
UILabel *label = [UILabel new]; 
label.text = @"Hello World"; 
label.textAlignment = UITextAlignmentCenter; 
label.frame = CGRectMake(0, 0, size.width, size.height); 
label.backgroundColor = [UIColor clearColor]; 
label.layer.cornerRadius = 10; 
[label.layer setMasksToBounds:YES]; 
// customLabel.backgroundColor = [UIColor whiteColor]; 
label.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"options.png"]]; 

/** Add the Label to the shawdow layer */ 
[shadowLayer addSublayer:label.layer]; 

[self.view.layer addSublayer:shadowLayer];  

[shadowLayer release]; 
+0

यह सही है। मुद्दा यह है कि एक पैटर्न छवि से भरी परत एक कोने त्रिज्या का सम्मान नहीं करेगी जबतक कि आप सीमाओं के लिए मुखौटा नहीं करते हैं, और यदि आप बाध्य करने के लिए mdo_ मुखौटा करते हैं तो छाया नहीं खींची जाएगी। तो छाया के लिए एक अलग परतों की आवश्यकता है। – jrturton

+0

मैं पोंट देखता हूं। लेकिन, दुर्भाग्य से कोड मेरे लिए कुछ भी नहीं दिखाता है। मैंने कोड को कॉपी किया क्योंकि यह "options.png" नाम की पृष्ठभूमि फ़ाइल के साथ है, जो मेरे पास नहीं है, यह एक ब्लैक बॉक्स दिखाता है। जब मैं अपनी पृष्ठभूमि फ़ाइल नाम डालता हूं तो यह कुछ भी नहीं दिखाता है। मैं वास्तव में इस से उलझन में हूँ! मैं यह देखने के लिए कोशिश करूँगा कि मैं इसे क्या कर सकता हूं। – hsnm

+0

क्या @jrturton ने कहा सही है, मैंने कोड के साथ यही किया है। कुछ भी नहीं देखकर। आइए परिणामों को डीबग करें - इसे आज़माएं, लेबल पर क्लिक करें। बैकग्राउंड रंग = [[यूआईसीओलर एलोक] initWithPatternImage: [UIImage imageNamed: @ "options.png"]]; लाइन। उपरोक्त रेखा को अनदेखा करें और कस्टम लेबल लेबल को लेबल में बदलें। अब आपको एक काले रंग के छाया के साथ एक सफेद गोलाकार लेबल देखना चाहिए। क्या यह परिणाम मिल रहा है? – haroldcampbell

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