Я сделал CALayer
с добавленным CATextLayer
и текст получился размытым. В документах они говорят о «подпиксельном сглаживании», но это не значит для меня. У кого-нибудь есть фрагмент кода, который делает CATextLayer
с четким текстом?Как получить текст в CATextLayer, чтобы быть ясным
Вот текст из документации Apple:
Примечание: CATextLayer отключает субпиксельное сглаживание при отображении текста. Текст может быть нарисован только с использованием сглаживания подпикселей, когда он , составлен в существующем непрозрачном фоне, в то же время, что растеризован. Невозможно нарисовать субпиксель-сглаженный текст самим , будь то изображение или слой, отдельно перед , имеющие фоновые пиксели, чтобы сплести текстовые пиксели в. Установка Свойство непрозрачности слоя к YES не изменяет режим рендеринга .
Второе предложение означает, что можно получить хорошо выглядящий текст, если один 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];
[email protected]"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
Спасибо!
EDIT: Добавление кода, который я фактически использовал, что привело к размытому тексту. Это связано с вопросом, связанным с тем, что я добавил 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);
EDIT 2: Смотрите мой ответ ниже, как это удалось решить. SBG.
Это не ответ на ваш вопрос, но может быть для кого-то вроде меня, кто только ищет, чтобы рисовать приписаны текст, наиболее похожий на использование UILabel: http://stackoverflow.com/questions/3786528/iphone-ipad-how-exactly-use-nsattributedstrin g – DenNukem