2011-04-28 14 views
5

पर आंतरिक छाया लागू करें मैं एक UILabel में आंतरिक छाया लागू करना चाहता हूं। मेरे पास एक समाधान है, लेकिन यह काफी अच्छा नहीं है। बेहतर समाधान वाला कोई भी व्यक्ति?UILabel

// UILabel subclass 

- (void) drawTextInRect:(CGRect)rect { 
    CGSize myShadowOffset = CGSizeMake(0, 2); 
    float myColorValues[] = {255, 0, 0, 1}; 

    CGContextRef myContext = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(myContext); 

    CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGColorRef myColor = CGColorCreate(myColorSpace, myColorValues); 

    CGContextSetShadowWithColor (myContext, myShadowOffset, 5, myColor); 
    CGContextSetBlendMode(myContext, kCGBlendModeLighten); 

    [super drawTextInRect:rect]; 

    CGColorRelease(myColor); 
    CGColorSpaceRelease(myColorSpace); 

    CGContextRestoreGState(myContext); 
} 

मैं UILabel की परत संपत्ति से परिचित हूँ, लेकिन shadow offset (जब तक मैं कुछ याद कर रहा हूँ) हमें एक बाहरी छाया, नहीं भीतरी छाया देता है।

+0

क्या आपने myShadowOffset में नकारात्मक मानों का प्रयास किया है? – adam

उत्तर

4

मैंने ऐसा करने की कोशिश की लेकिन आखिरकार डिफ़ॉल्ट shadowOffset का उपयोग करने का विकल्प चुना और टेक्स्ट को आंतरिक ड्रॉप छाया प्रभाव देने के लिए shadowColor के साथ खेलना चुना। छोटे ग्रंथों में यह आपको एक अच्छा आंतरिक छाया प्रभाव देता है। उदाहरण के लिए, यदि आपके पास ग्रे रंग पृष्ठभूमि है और छाया के लिए एक सफेद रंग लागू करें, तो आपके पास एक स्वीकार्य आंतरिक छाया प्रभाव है।

कभी-कभी, ग्राफिक्स टूल के साथ उन ग्रंथों को डिजाइन करना और यदि आवश्यक हो तो स्थानीय प्रतियां बनाना बेहतर होता है।

21

उधार, यदि आप रिवर्स यानी ऐसा लगता है। अपने टेक्स्ट रंग को अपने पृष्ठभूमि रंग (कम अल्फा के साथ) के बराबर सेट करें और फिर छाया को एक मजबूत रंग के रूप में सेट करें, यह एक सभ्य इन्सेट प्रभाव बनाता है। यहाँ मैं क्या मतलब है (ध्यान दें: मेरा विचार पृष्ठभूमि सफेद है):

cell.textLabel.textColor  = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]; 
cell.textLabel.shadowColor = [UIColor darkGrayColor]; 
cell.textLabel.shadowOffset = CGSizeMake(-1.0,-1.0); 
[cell.textLabel setText:@"Welcome to MyApp!"]; 

और इस उत्पादन

inset UILabel text

यह शायद ही बहुत हल्का पृष्ठभूमि पर काम करेगा के रूप में मुझे लगता है यह पैदा करेगा है गहरे पृष्ठभूमि पर अवांछित ओवरले।

आप प्रकाश की दिशा बदलने के लिए शैडो ऑफसेट बदल सकते हैं।

+0

बहुत आसान, एक अच्छा समाधान। – Nik