Как сделать текст в CATextLayer ясным

Я создал CALayer с добавленным CATextLayer , и текст получается размытым. В документации говорится о «субпиксельном сглаживании», но для меня это мало что значит. Текст можно рисовать только с использованием субпиксельного сглаживания, если он в существующий непрозрачный фон, в то же время он растеризован. Невозможно нарисовать текст с субпиксельным сглаживанием себя, будь то изображение или слой, отдельно перед имея фоновые пиксели, в которые вплетаются пиксели текста. Настройка свойство непрозрачности слоя на ДА не изменяет рендеринг режим.

Второе предложение подразумевает, что можно получить красивый текст, если объединить его в существующий непрозрачный фон одновременно с растеризацией. Это здорово, но как мне составить его и как сделать его непрозрачным фоном и как растеризовать его?

Код, который они используют в своем примере меню киоска, выглядит следующим образом: (Это OS X, а не iOS , но я предполагаю, что это работает!)

NSInteger i;
for (i=0;i<[names count];i++) {
    CATextLayer *menuItemLayer=[CATextLayer layer];
    menuItemLayer.string=[self.names objectAtIndex:i];
    menuItemLayer.font=@"Lucida-Grande";
    menuItemLayer.fontSize=fontSize;
    menuItemLayer.foregroundColor=whiteColor;
    [menuItemLayer addConstraint:[CAConstraint
         constraintWithAttribute:kCAConstraintMaxY
                      relativeTo:@"superlayer"
                       attribute:kCAConstraintMaxY
                          offset:-(i*height+spacing+initialOffset)]];
    [menuItemLayer addConstraint:[CAConstraint
         constraintWithAttribute:kCAConstraintMidX
                      relativeTo:@"superlayer"
                       attribute:kCAConstraintMidX]];
    [self.menuLayer addSublayer:menuItemLayer];
} // end of for loop 

Спасибо!


РЕДАКТИРОВАТЬ: Добавление кода, который я действительно использовал, привело к размытому тексту. Это из связанного вопроса, который я опубликовал о добавлении UILabel , а не CATextLayer , но вместо этого получил черный ящик. http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box

CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, 1.0, 1.0};
CGColorRef almostWhite = CGColorCreate(space,components1);
CGFloat components2[4] = {0.0, 0.0, 0.0, 1.0};
CGColorRef almostBlack = CGColorCreate(space,components2);
CGColorSpaceRelease(space);
upperOperator.string = [NSString stringWithFormat:@"13"];
upperOperator.bounds = CGRectMake(0, 0, 100, 50);
upperOperator.foregroundColor = almostBlack;
upperOperator.backgroundColor = almostWhite;
upperOperator.position = CGPointMake(50.0, 25.0);
upperOperator.font = @"Helvetica-Bold";
upperOperator.fontSize = 48.0f;
upperOperator.borderColor = [UIColor redColor].CGColor;
upperOperator.borderWidth = 1;
upperOperator.alignmentMode = kCAAlignmentCenter;
[card addSublayer:upperOperator];
[upperOperator release];
CGColorRelease(almostWhite);
CGColorRelease(almostBlack);

ИЗМЕНИТЬ 2: См. Мой ответ ниже, чтобы узнать, как это было решено. sbg.

91
задан Sven 14 April 2012 в 11:29
поделиться