2011-02-23 11 views
6

के साथ uilabel मैं सोच रहा था कि मैं UILabel के लिए टेक्स्ट स्ट्रोक कैसे बना सकता हूं? क्या कोई संभावित तरीका है? enter image description hereआउटलाइन या स्ट्रोक

धन्यवाद,

#import <Foundation/Foundation.h> 


@interface CustomLabel : UILabel { 

} 

@end 

#import "CustomLabel.h" 


@implementation CustomLabel 

- (void)drawTextInRect:(CGRect)rect { 

    CGSize shadowOffset = self.shadowOffset; 
    UIColor *textColor = self.textColor; 

    CGContextRef c = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(c, 22); 

    CGContextSetTextDrawingMode(c, kCGTextStroke); 
    self.textColor = [UIColor whiteColor]; 
    [super drawTextInRect:rect]; 

    CGContextSetTextDrawingMode(c, kCGTextFill); 
    self.textColor = textColor; 
    self.shadowOffset = CGSizeMake(0, 0); 
    [super drawTextInRect:rect]; 

    self.shadowOffset = shadowOffset; 
    //works fine with no warning 
} 

अब सवाल यह है कि मैं कैसे अलग viewcontrollers पर एक IBOutlet लेबल के साथ इस उपवर्ग उपयोग कर सकते हैं। यह सही है:

CGContextSetLineJoin(c,kCGLineJoinRound); 

बहुत बड़ी एक स्ट्रोक करने के लिए बहुत तेज एक चरित्र लागू किया की स्मृतियों को रोका जा सकता है:

label = [[CustomLabel alloc] initWithFrame:CGRectMake(0, 0, 190, 190)]; 
+0

इंटरफ़ेस बिल्डर में 'लेबल' बनाने का प्रयास क्यों नहीं करते हैं और कनेक्शन बनाते हैं ताकि आपका ऐप कम से कम काम कर सके? – Lynn

+0

धन्यवाद :) मैं उलझन में था: डी अब महान काम करता है – Momi

+0

धन्यवाद! महान विचार! फिर भी इसे पैरामीट्रिज होना चाहिए, जैसे लाइन चौड़ाई, रंग इत्यादि। – Bogdan

उत्तर

3

यह कुछ जोड़ने के लिए करने के लिए कि फ़ॉन्ट और वर्ण के आधार पर बताया मददगार हो सकता है।

0

इस कार्यान्वयन के साथ एक मुद्दा है। स्ट्रोक के साथ एक टेक्स्ट को खींचना स्ट्रोक के बिना टेक्स्ट खींचने से थोड़ा अलग चरित्र ग्लाइफ चौड़ाई है, जो "केंद्रित" परिणाम उत्पन्न कर सकता है। आप भरने वाले पाठ के आस-पास एक अदृश्य स्ट्रोक जोड़कर इसे ठीक कर सकते हैं।

आप बदलना चाहिए:

CGContextSetTextDrawingMode(c, kCGTextFill); 
self.textColor = textColor; 
self.shadowOffset = CGSizeMake(0, 0); 
[super drawTextInRect:rect]; 

साथ:

CGContextSetTextDrawingMode(context, kCGTextFillStroke); 
self.textColor = textColor; 
[[UIColor clearColor] setStroke]; // invisible stroke 
self.shadowOffset = CGSizeMake(0, 0); 
[super drawTextInRect:rect]; 

मैं, 100% यकीन नहीं है कि अगर असली सौदा है, क्योंकि मैं अगर self.textColor = textColor; एक ही प्रभाव पड़ता है पता नहीं है [textColor setFill] के रूप में, लेकिन आपको विचार मिलता है।

प्रकटीकरण: मैं THLabel के डेवलपर हूं।

मैंने कुछ समय पहले एक UILabel सबक्लास जारी किया है, जो टेक्स्ट और अन्य प्रभावों में रूपरेखा की अनुमति देता है। आप इसे यहां पा सकते हैं: https://github.com/tobihagemann/THLabel

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