2013-05-02 2 views
2

Я пытаюсь добавить CATextLayer в UITableViewCell. Проблема в том, что текст рендерится как черный, а я уже установил его foregroundColor. Может ли кто-нибудь сказать мне, что мне не хватает? Благодарю.CATextLayer textcolor всегда черный

CATextLayer *buyPrice_port = [CATextLayer layer]; 
buyPrice_port.frame = CGRectMake(144, 42, 76, 21); 
buyPrice_port.font = (__bridge CFTypeRef)([UIFont boldSystemFontOfSize:18]); 
buyPrice_port.foregroundColor = [UIColor colorWithRed:0 green:190/255.0 blue:191/255.0 alpha:1.0].CGColor; 
buyPrice_port.alignmentMode = kCAAlignmentCenter; 
buyPrice_port.string = @"BAC"; 
[self.contentView.layer addSublayer:buyPrice_port]; 
+0

Смотрите также [Как изменить цвет текста в CATextLayer в Swift] (HTTP: //stackoverflow.com/questions/38835130/how-to-change-the-text-color-in-a-catextlayer-in-swift) – Suragch

ответ

3

Эта странная проблема была связана с тем, как я устанавливал свой шрифт. Вместо этого он должен быть установлен так:

buyPrice.font = CFBridgingRetain([UIFont boldSystemFontOfSize:18].fontName); 
buyPrice.fontSize = 18; 
+0

Чтобы добавить свой собственный опыт: это также происходит, если имя шрифта, которым вы являетесь попытки использовать не существует. Например: '_textLayer.font = CGFontCreateWithFontName ((CFStringRef) @" SomeNonExistingFont ");' – dcestari

2

Просто думал, я бы перезвон, чтобы исправить информацию, которая здесь. Причина, по которой ваш код не работает, заключается в том, что UIFont не может быть отправлен в CGFontRef (однако NSFont может работать в Mac OS X). Свойство шрифта CATextLayer может ожидать шрифт под Mac OS, но под прошивкой он может использовать только имя шрифта в виде строки, так что вы можете просто набрать

layer.font = (__bridge CFTypeRef)@"Futura" 

Вы не должны использовать CFBridgingRetain на NSString. Вы несете ответственность за его освобождение, позвонив в CFRelease.

-1

Использование CPTMutableTextStyle для изменения шрифта и цвета CPTTextLayer, надеюсь, что это может поможет .....

static CPTMutableTextStyle *whiteText = nil; 
if (!whiteText) { 
    whiteText  = [[CPTMutableTextStyle alloc] init]; 
    whiteText.color = [CPTColor whiteColor]; 
} 

    CPTTextLayer *newLayer = [[[CPTTextLayer alloc] initWithText:titleString 
                  style:whiteText] autorelease];