Я сделал CALayer
с добавлением, CATextLayer
и текст получается размытым. В документации говорится о «субпиксельном сглаживании», но для меня это мало что значит. У кого-нибудь есть фрагмент кода, который делает CATextLayer
небольшой текст понятным?
Вот текст из документации Apple:
Примечание. CATextLayer отключает субпиксельное сглаживание при визуализации текста. Текст может быть нарисован с использованием субпиксельного сглаживания только тогда, когда он объединяется в существующий непрозрачный фон одновременно с растеризацией. Невозможно нарисовать текст с субпиксельным сглаживанием отдельно, будь то изображение или слой, отдельно до наличия пикселей фона, в которые будут вплетаться пиксели текста. Установка свойства непрозрачности слоя на ДА не изменяет режим рендеринга.
Второе предложение подразумевает, что можно получить красивый текст, если composites
превратить его в. existing opaque background at the same time that it's rasterized.
Отлично, но как мне составить его, как сделать его непрозрачным фоном и как растеризовать его?
Код, который они используют в своем примере меню киоска, выглядит следующим образом: (Это 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: См. Мой ответ ниже, чтобы узнать, как это было решено. сбг.