Цвет текста CATextLayer всегда черный

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

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];

person NightFury    schedule 02.05.2013    source источник
comment
См. также Как изменить цвет текста в CATextLayer в Swift   -  person Suragch    schedule 08.08.2016


Ответы (3)


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

buyPrice.font = CFBridgingRetain([UIFont boldSystemFontOfSize:18].fontName);
buyPrice.fontSize = 18;
person NightFury    schedule 02.05.2013
comment
Чтобы добавить мой собственный опыт: это также происходит, если имя шрифта, который вы пытаетесь использовать, не существует. Например: _textLayer.font = CGFontCreateWithFontName((CFStringRef)@"SomeNonExistingFont"); - person dcestari; 26.10.2015

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

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

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

person Lucas Derraugh    schedule 03.06.2013

Используйте 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];
person Santosh    schedule 14.04.2014