2013-10-27 22 views

cevap

6

İşte çözüm. Bu işlevler Çekirdek Metin lehine kaldırılmıştır. Çok daha gelişmiş ama anlamaya biraz zaman alıyor. Bu örnek "Merhaba Dünya!" Courier yazı tipini kullanarak.

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 

    CFStringRef font_name = CFStringCreateWithCString(NULL, "Courier", kCFStringEncodingMacRoman); 

    CTFontRef font = CTFontCreateWithName(font_name, 36.0, NULL); 

    CFStringRef keys[] = { kCTFontAttributeName }; 

    CFTypeRef values[] = { font }; 

    CFDictionaryRef font_attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)&keys, (const void **)&values, sizeof(keys)/sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 

    CFRelease(font_name); 

    CFRelease(font); 

    int x = 10; 
    int y = 10; 
    const char *text = "Hello World!"; 

    CFStringRef string = CFStringCreateWithCString(NULL, text, kCFStringEncodingMacRoman); 

    CFAttributedStringRef attr_string = CFAttributedStringCreate(NULL, string, font_attributes); 

    CTLineRef line = CTLineCreateWithAttributedString(attr_string); 

    CGContextSetTextPosition(context, x, y); 

    // Core Text uses a reference coordinate system with the origin on the bottom-left 
    // flip the coordinate system before drawing or the text will appear upside down 
    CGContextTranslateCTM(context, 0, self.bounds.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 

    CTLineDraw(line, context); 

    CFRelease(line); 

    CFRelease(string); 

    CFRelease(attr_string); 

    CGContextRestoreGState(context); 
} 

enter image description here